Microsoft 365 MCP Server
This server integrates Microsoft 365 services (Outlook, Calendar, OneDrive, Excel, Contacts, Teams, SharePoint, etc.) via the Microsoft Graph API, enabling automated management through MCP tools.
Authentication & Account Management
Login/logout using device code flow, OAuth, or bring-your-own-token
Multi-account support: list, select, pin, and remove accounts
Works with Global (default) and China (21Vianet) Microsoft 365 clouds
Email (Outlook/Mail)
Read, send, reply, forward, and delete messages
Manage mail folders, message rules, and focused inbox overrides
Get mail tips (OOF status, mailbox full, etc.)
Retrieve and update mailbox settings (out-of-office, time zone, working hours)
Calendar
Create, update, and delete calendars and events (including recurring)
Get calendar views with expanded recurring event instances
Accept, decline, tentatively accept, cancel, forward, or snooze/dismiss reminders
Manage calendar sharing permissions and delegate access
Incremental delta sync of calendar changes
OneDrive & Files
Browse, search, upload, download, copy, move/rename, and delete files and folders
Create sharing links and manage permissions
View thumbnails, version history, and generate embeddable previews
Track drive changes via delta sync
Excel
List worksheets; create, read, update, and delete tables and table rows
Read, write, clear, insert, delete, merge, unmerge, and format cell ranges
Create charts and sort ranges; discover populated worksheet bounds
Contacts
Create, read, update, and delete Outlook contacts and contact folders (including sub-folders)
User Profile
Retrieve the signed-in user's profile and properties; list organization users
Teams & SharePoint (requires --org-mode)
Access Teams chats, meetings, transcripts, attendance reports, and presence
Manage SharePoint sites, lists, and shared mailboxes/calendars
Batch Operations
Combine up to 20 Graph API requests into a single call via
graph-batch
Additional Features
Output formats: JSON (default) or experimental TOON format (30–60% fewer tokens)
Tool filtering: Limit tools by preset, regex, or read-only mode; dynamic tool discovery to reduce initial context size
Deployment: stdio or HTTP transport; supports Docker, Azure Container Apps, and reverse proxy; Azure Key Vault integration
Token storage: OS credential store, file-based, or external auth-cache command
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Microsoft 365 MCP Servershow my calendar events for tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ms-365-mcp-server
Microsoft 365 MCP Server
A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API.
Supported Clouds
This server supports multiple Microsoft cloud environments:
Cloud | Description | Auth Endpoint | Graph API Endpoint |
Global (default) | International Microsoft 365 | login.microsoftonline.com | graph.microsoft.com |
China (21Vianet) | Microsoft 365 operated by 21Vianet | login.chinacloudapi.cn | microsoftgraph.chinacloudapi.cn |
Related MCP server: Microsoft Graph MCP Server
Prerequisites
Node.js >= 20 (recommended)
Node.js 14+ may work with dependency warnings
Features
Authentication via Microsoft Authentication Library (MSAL)
Comprehensive Microsoft 365 service integration
Read-only mode support for safe operations
Tool filtering for granular access control
Tool presets and dynamic discovery to shrink the tool surface and token usage
Output Format: JSON vs TOON
The server supports two output formats that can be configured globally:
JSON Format (Default)
Standard JSON output with pretty-printing:
{
"value": [
{
"id": "1",
"displayName": "Alice Johnson",
"mail": "alice@example.com",
"jobTitle": "Software Engineer"
}
]
}(experimental) TOON Format
Token-Oriented Object Notation for efficient LLM token usage:
value[1]{id,displayName,mail,jobTitle}:
"1",Alice Johnson,alice@example.com,Software EngineerBenefits:
30-60% fewer tokens vs JSON
Best for uniform array data (lists of emails, calendar events, files, etc.)
Ideal for cost-sensitive applications at scale
Usage: (experimental) Enable TOON format globally:
Via CLI flag:
npx @softeria/ms-365-mcp-server --toonVia Claude Desktop configuration:
{
"mcpServers": {
"ms365": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server", "--toon"]
}
}
}Via environment variable:
MS365_MCP_OUTPUT_FORMAT=toon npx @softeria/ms-365-mcp-serverSupported Services & Tools
The server provides 300+ tools covering most of the Microsoft Graph API surface. Each tool maps 1-to-1 to a Graph API endpoint and is defined declaratively in src/endpoints.json.
Personal Account Tools (Available by default)
Email (Outlook), Calendar, OneDrive Files, Excel, OneNote, To Do Tasks, Planner, Contacts, User Profile, Search
Organization Account Tools (Requires --org-mode flag)
Teams & Chats, Online Meetings, Transcripts & Recordings, Attendance Reports, SharePoint Sites & Lists, Shared Mailboxes & Calendars, User Management, Presence, Virtual Events
Required Graph API Permissions
Permissions are requested dynamically based on which tools are enabled. Use --list-permissions to see the exact permissions for your configuration:
# Personal mode (default)
npx @softeria/ms-365-mcp-server --list-permissions
# Organization mode (includes Teams, SharePoint, etc.)
npx @softeria/ms-365-mcp-server --org-mode --list-permissions
# Filtered by preset
npx @softeria/ms-365-mcp-server --preset mail --list-permissionsThis is useful for enterprise environments where Graph API permissions must be pre-approved and admin-consented before deploying a new version.
The --list-permissions JSON includes:
toolPermissions: permissions implied by the tool surface before--allowed-scopesfilteringeffectivePermissions: permissions implied by the tools that remain enabled after--allowed-scopespermissions: legacy alias foreffectivePermissions, kept for compatibility with existing scriptsallowedScopes: the configured scope allowlist, when provideddisabledTools: tools hidden because their required Graph scopes are not covered byallowedScopesmissingAllowedScopesForTools: unique missing scopes across disabled toolsextraAllowedScopesNotUsedByTools: allowed scopes that are not used by the current tool surface
Allowed Scopes
By default, MSAL requests the scopes implied by the enabled tools, and the tool surface is controlled by --enabled-tools, --preset, --org-mode, and --read-only.
Enterprise and headless deployments can add a scope boundary with --allowed-scopes or MS365_MCP_ALLOWED_SCOPES. When configured, the server first computes the normal tool surface, then hides Graph tools whose required scopes are not covered by the allowlist. OAuth metadata and login flows request only the effective permissions for the tools that remain enabled.
npx @softeria/ms-365-mcp-server \
--org-mode \
--enabled-tools '^(list-mail-messages|get-mail-message|list-drives|get-drive-item|download-bytes)$' \
--allowed-scopes 'User.Read Mail.Read Files.Read'CLI value takes precedence over MS365_MCP_ALLOWED_SCOPES; if neither is set, the default tool-derived scope behavior is unchanged. Supplying an empty value fails at startup so deployments do not accidentally fall back to a wider tool surface.
Scope coverage is hierarchy-aware: for example, Mail.ReadWrite covers tools that require Mail.Read, and Files.ReadWrite.All covers tools that require Files.Read.
SharePoint supports two enterprise permission models:
Broad tenant scopes such as
Sites.Read.All,Sites.ReadWrite.All, andSites.Manage.All.Microsoft Graph
Sites.Selected, where SharePoint site access is granted to the app on specific site collections and Graph evaluates the signed-in user's own permissions at request time.
The default org-mode behavior continues to request the broad SharePoint scopes used by existing deployments. Enterprises that want selected-site SharePoint access can set an allowlist containing Sites.Selected instead of broad Sites.*.All scopes. Direct site/list/item tools that target an explicit SharePoint site, and the /drives/{drive-id}/... item tools (list, get, upload, folder, move/rename, copy, versions) for drives of a granted site, can run with Sites.Selected; tenant-wide SharePoint discovery and search tools still require broad SharePoint scopes.
npx @softeria/ms-365-mcp-server \
--org-mode \
--read-only \
--enabled-tools 'sharepoint|site|drive|planner' \
--allowed-scopes 'User.Read Files.Read Notes.Read Tasks.Read Sites.Selected'In HTTP mode, OAuth discovery advertises the effective filtered permissions so clients request the same consent surface. On-Behalf-Of mode (--obo) still advertises api://<clientId>/access_as_user for protected-resource metadata; --allowed-scopes does not override OBO.
Requesting extra scopes
--allowed-scopes only ever narrows the token request. To request a Graph scope that no bundled tool needs — for example to drive an endpoint via graph-batch — use --extra-scopes (or MS365_MCP_EXTRA_SCOPES). These scopes are appended verbatim to the token request, on top of the tool-derived scopes.
npx @softeria/ms-365-mcp-server \
--org-mode \
--extra-scopes 'CopilotPackages.ReadWrite.All'This is for use with your own Azure app registration (MS365_MCP_CLIENT_ID / MS365_MCP_CLIENT_SECRET): the default Softeria app only declares a lean, fixed permission set, so request additional scopes against an app you control (your tenant admin consents to them there). CLI value takes precedence over the env var; an empty value fails at startup.
Organization/Work Mode
To access work/school features (Teams, SharePoint, etc.), enable organization mode using any of these flags:
{
"mcpServers": {
"ms365": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server", "--org-mode"]
}
}
}Organization mode must be enabled from the start to access work account features. Without this flag, only personal account features (email, calendar, OneDrive, etc.) are available.
Shared Mailbox Access
To access shared mailboxes, you need:
Organization mode: Shared mailbox tools require
--org-modeflag (work/school accounts only)Delegated permissions:
Mail.Read.Sharedto read,Mail.ReadWrite.Sharedto create, update or move messages,Mail.Send.Sharedto send, reply or forward, andCalendars.Read.Sharedfor the shared calendar toolsExchange permissions: The signed-in user must have been granted access to the shared mailbox
Usage: Use the shared mailbox's email address as the
user-idparameter in the shared mailbox tools
Finding shared mailboxes: Use the list-users tool to discover available users and shared mailboxes in your
organization.
Example: list-shared-mailbox-messages with user-id set to shared-mailbox@company.com
Quick Start Example
Test login in Claude Desktop:
Examples
Integration
Claude Desktop
To add this MCP server to Claude Desktop, edit the config file under Settings > Developer.
Personal Account (MSA)
{
"mcpServers": {
"ms365": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server"]
}
}
}Work/School Account (Global)
{
"mcpServers": {
"ms365": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server", "--org-mode"]
}
}
}Work/School Account (China 21Vianet)
{
"mcpServers": {
"ms365-china": {
"command": "npx",
"args": ["-y", "@softeria/ms-365-mcp-server", "--org-mode", "--cloud", "china"]
}
}
}Claude Code CLI
Personal Account (MSA)
claude mcp add ms365 -- npx -y @softeria/ms-365-mcp-serverWork/School Account (Global)
# macOS/Linux
claude mcp add ms365 -- npx -y @softeria/ms-365-mcp-server --org-mode
# Windows (use cmd /c wrapper)
claude mcp add ms365 -s user -- cmd /c "npx -y @softeria/ms-365-mcp-server --org-mode"Work/School Account (China 21Vianet)
# macOS/Linux
claude mcp add ms365-china -- npx -y @softeria/ms-365-mcp-server --org-mode --cloud china
# Windows (use cmd /c wrapper)
claude mcp add ms365-china -s user -- cmd /c "npx -y @softeria/ms-365-mcp-server --org-mode --cloud china"For other interfaces that support MCPs, please refer to their respective documentation for the correct integration method.
Open WebUI
Open WebUI supports MCP servers via HTTP transport with OAuth 2.1.
Start the server with HTTP mode:
npx @softeria/ms-365-mcp-server --httpIn Open WebUI, go to Admin Settings → Tools (
/admin/settings/tools) → Add Connection:Type: MCP Streamable HTTP
URL: Your MCP server URL with
/mcppathAuth: OAuth 2.1
Click Register Client.
Note: Dynamic client registration is enabled by default in HTTP mode. Use
--no-dynamic-registration(or setMS365_MCP_DISABLE_DCR=true) to disable it. If using a custom Azure Entra app, the platform type for your redirect URI depends on whether the app has a client secret: with a secret use "Web", without one use "Mobile and desktop applications" (never "Single-page application").
Quick test setup using the default Azure app (ID ms-365 and localhost:8080 are pre-configured):
docker run -d -p 8080:8080 \
-e WEBUI_AUTH=false \
-e OPENAI_API_KEY \
ghcr.io/open-webui/open-webui:main
npx @softeria/ms-365-mcp-server --httpThen add connection with URL http://localhost:3000/mcp and ID ms-365.
Running in Docker behind a reverse proxy? Set
--public-url https://your-domain.comso the OAuth authorize URL handed to the user's browser is reachable from outside the container network. See docs/deployment.md for the full guide.
Local Development
For local development or testing:
# From the project directory
claude mcp add ms -- npx tsx src/index.ts --org-modeOr configure Claude Desktop manually:
{
"mcpServers": {
"ms365": {
"command": "node",
"args": ["/absolute/path/to/ms-365-mcp-server/dist/index.js", "--org-mode"]
}
}
}Note: Run
npm run buildafter code changes to update thedist/folder.
Authentication
⚠️ You must authenticate before using tools.
The server supports three authentication methods:
1. Device Code Flow (Default)
For interactive authentication via device code:
MCP client login:
Call the
logintool (auto-checks existing token)If needed, get URL+code, visit in browser
Use
verify-logintool to confirm
CLI login:
npx @softeria/ms-365-mcp-server --loginFollow the URL and code prompt in the terminal.
Tokens are cached securely in your OS credential store (fallback to file).
2. OAuth Authorization Code Flow (HTTP mode only)
When running with --http, the server requires OAuth authentication:
npx @softeria/ms-365-mcp-server --http 3000This mode:
Advertises OAuth capabilities to MCP clients
Provides OAuth endpoints at
/auth/*(authorize, token, metadata)Requires
Authorization: Bearer <token>for all MCP requestsValidates tokens with Microsoft Graph API
Disables login/logout tools by default (use
--enable-auth-toolsto enable them)
MCP clients will automatically handle the OAuth flow when they see the advertised capabilities.
Setting up Azure AD for OAuth Testing
To use OAuth mode with custom Azure credentials (recommended for production), you'll need to set up an Azure AD app registration:
Create Azure AD App Registration:
Go to Azure Portal
Navigate to Azure Active Directory → App registrations → New registration
Set name: "MS365 MCP Server"
Configure Redirect URIs:
Configure the OAuth callback URI: Go to your app registration and on the left side, go to Authentication.
Under Platform configurations:
Click Add a platform (if you don’t already see one for "Mobile and desktop applications" / "Public client").
Choose Mobile and desktop applications or Public client/native (mobile & desktop) (label depends on portal version).
Testing with MCP Inspector (
npm run inspector):
Go to your app registration and on the left side, go to Authentication.
Under Platform configurations:
Click Add a platform (if you don’t already see one for "Web").
Choose Web.
Configure the following redirect URIs
http://localhost:6274/oauth/callbackhttp://localhost:6274/oauth/callback/debughttp://localhost:3000/callback(optional, for server callback)
Get Credentials:
Copy the Application (client) ID from Overview page
Go to Certificates & secrets → New client secret → Copy the secret value (optional for public apps)
Configure Environment Variables: Create a
.envfile in your project root:MS365_MCP_CLIENT_ID=your-azure-ad-app-client-id-here MS365_MCP_CLIENT_SECRET=your-secret-here # Optional for public apps MS365_MCP_TENANT_ID=common
With these configured, the server will use your custom Azure app instead of the built-in one.
Note:
.envis read from the directory the server is started in, and the MCP client decides what that is. OnlyMS365_MCP_CLIENT_ID,MS365_MCP_CLIENT_SECRET,MS365_MCP_TENANT_IDandMS365_MCP_CLOUD_TYPEare read from it. Every other variable listed above must be set in your shell or MCP client config; anything else found in a.envis ignored with a warning on stderr.
3. Bring Your Own Token (BYOT)
If you are running ms-365-mcp-server as part of a larger system that manages Microsoft OAuth tokens externally, you can provide an access token directly to this MCP server:
MS365_MCP_OAUTH_TOKEN=your_oauth_token npx @softeria/ms-365-mcp-serverThis method:
Bypasses the interactive authentication flows
Use your pre-existing OAuth token for Microsoft Graph API requests
Does not handle token refresh (token lifecycle management is your responsibility)
Note: HTTP mode requires authentication. For unauthenticated testing, use stdio mode with device code flow.
Authentication Tools: In HTTP mode, login/logout tools are disabled by default since OAuth handles authentication. Use
--enable-auth-toolsif you need them available.
Multi-Account Support
Use a single server instance to serve multiple Microsoft accounts. When more than one account is logged in, an account parameter is automatically injected into every tool, allowing you to specify which account to use per tool call.
Login multiple accounts (one-time per account):
# Login first account (device code flow)
npx @softeria/ms-365-mcp-server --login
# Follow the device code prompt, sign in as personal@outlook.com
# Login second account
npx @softeria/ms-365-mcp-server --login
# Follow the device code prompt, sign in as work@company.comList configured accounts:
npx @softeria/ms-365-mcp-server --list-accountsUse in tool calls: Pass "account": "work@company.com" in any tool request:
{ "tool": "list-mail-messages", "arguments": { "account": "work@company.com" } }Behavior:
With a single account configured, it auto-selects (no
accountparameter needed).With multiple accounts and no
accountparameter, the server uses the selected default or returns a helpful error listing available accounts.100% backward compatible: existing single-account setups work unchanged.
The
accountparameter accepts email address (e.g.user@outlook.com) or MSALhomeAccountId.
Strict Account Pinning
Headless stdio deployments can pin the local MSAL cache to one expected Microsoft account:
# Username matching is case-insensitive
MS365_MCP_EXPECTED_USERNAME=work@company.com npx @softeria/ms-365-mcp-server --login
# Or pin the exact MSAL homeAccountId shown by --list-accounts
npx @softeria/ms-365-mcp-server --expected-home-account-id <homeAccountId> --loginUse --list-accounts to discover homeAccountId values. The MCP list-accounts tool intentionally hides account IDs, so use the CLI for exact ID pinning.
Pinning is opt-in and local-MSAL only:
CLI values (
--expected-username,--expected-home-account-id) take precedence overMS365_MCP_EXPECTED_USERNAMEandMS365_MCP_EXPECTED_HOME_ACCOUNT_ID.Supplying an empty pin value fails at startup instead of being ignored.
Username pins are compared case-insensitively;
homeAccountIdpins are exact.If both pins are set, they must resolve to the same cached account.
Local stdio startup fails fast when the expected account is not in the token cache. Bootstrap by setting the pin, running
--login, then starting the headless server.Device-code and browser logins reject a missing or mismatched account before persisting the selected account or token cache.
Pinning collapses the effective MCP mode to single-account: the server does not advertise an
accountparameter and MCP instructions do not suggest account switching.--http,--obo, andMS365_MCP_OAUTH_TOKENuse request-provided tokens for Graph calls, so account pins are warning-only in those modes. If HTTP auth tools are enabled, the pin still applies to those local MSAL helper flows.--logoutclears all cached accounts, including the pinned account. For surgical cleanup, prefer--remove-account <id>.
For MCP multiplexers (Legate, Governor): Multi-account mode replaces the N-process pattern. Instead of spawning one server per account, a single instance handles all accounts via the
accountparameter, reducing tool duplication from N×110 to 110.
Tool Presets
To reduce initial connection overhead and token usage, use preset tool categories instead of loading the full tool set:
npx @softeria/ms-365-mcp-server --preset mail
npx @softeria/ms-365-mcp-server --list-presets # See all available presetsAvailable presets: mail, calendar, files, personal, work, excel, contacts, tasks, onenote, search, users, outlook, onedrive, teams, teams-write, all
Each endpoint in endpoints.json declares which presets it belongs to via a presets array, so every preset is an exact tool-name allow-list that never over-matches across apps (e.g. mail does not include shared-mailbox tools; those are in work). The universal binary reader download-bytes is included in every preset except teams-write, so whatever an app returns (a file, an attachment, a photo, a recording) can always be fetched; get-download-url (a pre-authenticated URL for drive/SharePoint files) rides with the drive-backed presets. So a preset that can find a file can always read its bytes.
The outlook, onedrive and teams presets are app-scoped: they expose exactly one Microsoft app. Use these for "expose exactly one app" deployments:
# Outlook only (mail + calendar + contacts; no shared mailboxes, no files)
npx @softeria/ms-365-mcp-server --preset outlook
# Teams only (requires --org-mode)
npx @softeria/ms-365-mcp-server --org-mode --preset teamsThe teams-write preset is the send-only counterpart to --read-only: send in chats, send/reply in channels, list chats/teams/channels by name, and activity notifications - no message reading and no byte downloaders. The requested token is minimal by construction (Chat.ReadBasic, the *.Send scopes, and basic team/channel listing - nothing that can read message content):
npx @softeria/ms-365-mcp-server --org-mode --preset teams-writeDynamic Tool Discovery
Instead of loading every tool upfront, use dynamic discovery so the LLM finds and loads tools only when it needs them:
npx @softeria/ms-365-mcp-server --discoveryKeeps the initial context small and cuts token usage, especially useful for long sessions or cost-sensitive setups (e.g. Open WebUI running against a paid API).
CLI Options
The following options can be used when running ms-365-mcp-server directly from the command line:
--login Login using device code flow
--logout Log out and clear saved credentials
--verify-login Verify login without starting the server
--list-permissions List required Graph API permissions and exit (respects --org-mode, --preset, --enabled-tools, --allowed-scopes)
--org-mode Enable organization/work mode from start (includes Teams, SharePoint, etc.)
--work-mode Alias for --org-mode
--force-work-scopes Backwards compatibility alias for --org-mode (deprecated)
--cloud <type> Microsoft cloud environment: global (default) or china (21Vianet)
--allowed-scopes <scopes> Limit exposed tools to Graph scopes covered by this allowlist
--extra-scopes <scopes> Append additional Graph scopes to the token request (for use with your own app registration + graph-batch)
--expected-username <username> Require local MSAL auth to use this account username
--expected-home-account-id <id> Require local MSAL auth to use this exact homeAccountIdServer Options
When running as an MCP server, the following options can be used:
-v Enable verbose logging
--read-only Start server in read-only mode, disabling write operations
--http [port] Use Streamable HTTP transport instead of stdio (optionally specify port, default: 3000)
Starts Express.js server with MCP endpoint at /mcp
--enable-auth-tools Enable login/logout tools when using HTTP mode (disabled by default in HTTP mode)
--enable-attachment-urls Let get-download-url mint a server-served URL for byte resources Graph
exposes no pre-authenticated URL for (see "Server-Minted Attachment URLs")
--attachment-port <port> Serve /attachment on its own listener on this port instead of on the
MCP app, so a fetcher that can read attachments cannot also reach /mcp
(requires --enable-attachment-urls; see "Splitting the attachment listener")
--attachment-host <host> Interface the --attachment-port listener binds. Defaults to whatever
--http bound, which with a wildcard --http leaves BOTH ports on every
interface and so isolates nothing — set this to make the split real
(requires --attachment-port; see "Splitting the attachment listener")
--no-dynamic-registration Disable OAuth Dynamic Client Registration (enabled by default in HTTP mode)
--enabled-tools <pattern> Filter tools using regex pattern (e.g., "excel|contact" to enable Excel and Contact tools)
--preset <names> Use preset tool categories (comma-separated). See "Tool Presets" section above
--list-presets List all available presets and exit
--toon (experimental) Enable TOON output format for 30-60% token reduction
--discovery Dynamic tool discovery: loads tools on demand to reduce initial token usage (see "Dynamic Tool Discovery" above)
--public-url <url> Public base URL for OAuth when behind a reverse proxy (see Open WebUI section and docs/deployment.md)Environment variables:
READ_ONLY=true|1: Alternative to --read-only flagENABLED_TOOLS: Filter tools using a regex pattern (alternative to --enabled-tools flag)MS365_MCP_ORG_MODE=true|1: Enable organization/work mode (alternative to --org-mode flag)MS365_MCP_FORCE_WORK_SCOPES=true|1: Backwards compatibility for MS365_MCP_ORG_MODEMS365_MCP_OUTPUT_FORMAT=toon: Enable TOON output format (alternative to --toon flag)MS365_MCP_MAX_TOP=<n>: Hard cap for Graph$top/topon list requests (positive integer). When the model passes a larger value, the server clamps it tonso responses stay smaller. Example:MS365_MCP_MAX_TOP=15MS365_MCP_MAX_PAGES=<n>: Maximum number of pages followed when a tool is called withfetchAllPages: true(positive integer, default100). Bounds memory and latency for large result sets.MS365_MCP_MAX_ITEMS=<n>: Maximum number of items accumulated whenfetchAllPages: true(positive integer, default10000). Pagination stops and the response is truncated once this many items are collected.MS365_MCP_ALLOW_PAGINATION=0|false|no: Disable multi-page following entirely. When set, thefetchAllPagesparameter is not advertised on tools, and any request that still passes it returns only the first page (default: pagination enabled).MS365_MCP_BODY_FORMAT=html: Return email bodies as HTML instead of plain text (default: text)MS365_MCP_MESSAGE_SIGNOFF_PREFIX=<text>: Signoff prepended to outgoing messages so recipients can tell they were agent-sent, e.g.🤖. Default: none. CLI equivalent:--message-signoff-prefix <text>(see Message Signoff below)MS365_MCP_MESSAGE_SIGNOFF_SUFFIX=<text>: Signoff appended to outgoing messages. Default: none. CLI equivalent:--message-signoff-suffix <text>.--no-message-signoffdisables both (see Message Signoff below)MS365_MCP_RATE_LIMIT_DISABLED=true|1: Disable per-IP rate limiting in HTTP mode (default: enabled — 30 req/min on/authorize,/token,/register; 120 req/min on/mcp)MS365_MCP_TRUST_PROXY_HOPS=<n>: Number of trusted reverse-proxy hops in HTTP mode (default1). Accurate per-IP rate limiting depends on this matching your deployment — set to the number of proxies in front of the server,0to use the raw socket peer IP, or a comma-separated subnet listMS365_MCP_ATTACHMENT_PORT=<port>: Serve the attachment route on its own listener on this port (alternative to --attachment-port; requires--enable-attachment-urls)MS365_MCP_ATTACHMENT_HOST=<host>: Interface theMS365_MCP_ATTACHMENT_PORTlistener binds (alternative to --attachment-host; requires--attachment-port). Defaults to the host--httpbound — which for a wildcard--httpmeans both ports answer everywhere and the port split isolates nothing. See "Splitting the attachment listener"MS365_MCP_CLOUD_TYPE=global|china: Microsoft cloud environment (alternative to --cloud flag)LOG_LEVEL: Set logging level (default: 'info')SILENT=true|1: Disable console outputMS365_MCP_REDACT_PII=false|0: Disable scrubbing of JWTs, Bearer headers, OAuth token fields, and email addresses from log messages (default: enabled). The server handles live Graph bearer tokens, so redaction is on unless you opt out for fully verbose local debugging.MS365_MCP_CLIENT_ID: Custom Azure app client ID (defaults to built-in app)MS365_MCP_TENANT_ID: Custom tenant ID (defaults to 'common' for multi-tenant). Personal Microsoft accounts should set this toconsumers- as of June 2026, refresh tokens issued via the default 'common' authority are rejected at the first refresh, so sessions die roughly an hour after loginMS365_MCP_OAUTH_TOKEN: Pre-existing OAuth token for Microsoft Graph API (BYOT method)MS365_MCP_KEYVAULT_URL: Azure Key Vault URL for secrets management (see Azure Key Vault section)MS365_MCP_TOKEN_CACHE_PATH: Custom file path for MSAL token cache (see Token Storage below)MS365_MCP_SELECTED_ACCOUNT_PATH: Custom file path for selected account metadata (see Token Storage below)MS365_MCP_AUTH_CACHE_COMMAND: External executable wrapper for provider-neutral auth-cache storage (see Token Storage below)MS365_MCP_AUTH_CACHE_COMMAND_TIMEOUT_MS: Per-invocation timeout forMS365_MCP_AUTH_CACHE_COMMAND(default:10000)MS365_MCP_EXPECTED_USERNAME: Require local MSAL auth to use this Microsoft account username (case-insensitive; CLI flag takes precedence)MS365_MCP_EXPECTED_HOME_ACCOUNT_ID: Require local MSAL auth to use this exact MSAL homeAccountId (CLI flag takes precedence)
Server-Minted Attachment URLs
get-download-url returns Microsoft's own pre-authenticated @microsoft.graph.downloadUrl
for OneDrive and SharePoint items. Graph publishes no such URL for mail and calendar
attachments, meeting recordings, or any other /$value byte endpoint — for those, the
only way to read the bytes has been download-bytes, which returns base64 into the
agent's context. A 73 KB, 3-page PDF costs about 24,500 tokens that way, and the model
cannot parse them anyway.
--enable-attachment-urls (HTTP mode, off by default) closes that gap. When Graph has no
URL of its own, get-download-url mints one this server serves:
GET /attachment?t=<ticket>&dgk=<key-id>&dgx=<expiry>&dgs=<signature>The ticket is 32 bytes of CSPRNG output, single-use, memory-only, and expires after
MS365_MCP_ATTACHMENT_URL_TTL_S seconds. Redeeming it streams the Graph bytes with this
server's own token; the fetcher sends no Authorization header and holds no Microsoft
credential.
This grants no authority the calling agent did not already have. Every target that can
be minted is one download-bytes would fetch for the same caller on the same account. The
ticket only moves those bytes out of the context window and into a direct transfer.
Configuration
MS365_MCP_ATTACHMENT_URL_BASE=http://m365-mcp:3000 # required
MS365_MCP_ATTACHMENT_URL_KEY=... # required (or _KEY_FILE=/path)
MS365_MCP_ATTACHMENT_URL_KEY_ID=1 # optional, default 1
MS365_MCP_ATTACHMENT_URL_TTL_S=120 # optional, default 120, max 300MS365_MCP_ATTACHMENT_URL_BASE is deliberately not MS365_MCP_PUBLIC_URL: that one is
browser-facing, for OAuth redirects, while this is fetched server-to-server and is
commonly a container address. A missing or malformed setting fails at startup rather than
per-request — a signing feature that comes up without a key would mint URLs nothing can
verify, silently.
Splitting the attachment listener
By default /attachment is served by the same Express app, on the same port, as /mcp.
That is fine when callers are authenticated by a bearer token, and it is a problem when
they are not. Under --trust-proxy-auth the MCP endpoint reads no Authorization header
at all — reachability is the authentication — so one shared port means the sidecar you
allowed through in order to fetch a PDF can also call every tool on the server.
--attachment-port <port> (or MS365_MCP_ATTACHMENT_PORT) moves the route onto a listener
of its own, and --attachment-host <host> (or MS365_MCP_ATTACHMENT_HOST) says which
interface that listener binds:
ms-365-mcp-server --http 10.89.0.2:3000 --trust-proxy-auth \
--enable-attachment-urls \
--attachment-port 3001 --attachment-host 10.89.1.2
MS365_MCP_ATTACHMENT_URL_BASE=http://m365-mcp:3001 # note: the attachment portGET /attachmenton 3001 works; on 3000 it is 404 — the MCP app never mounts it./mcpon 3001 is 404, as is everything else: the second app has the attachment route and nothing more. No OAuth router, no body parsers, no CORS, no health check.The 60 req/min limiter that guards the route follows it onto the new listener.
trust proxyis off on the attachment listener (andMS365_MCP_TRUST_PROXY_HOPSis not read for it), unlike the MCP listener, which trusts one hop. This port is meant to be dialled directly on a container network; honouringX-Forwarded-Foron the server's one uncredentialed surface would let a caller choose its own rate-limit bucket.
The flag requires --enable-attachment-urls and refuses to start without it — on its own
it would open a port with nothing on it while the operator believed the surfaces were
separated. In stdio mode it warns and is ignored, like the flag it depends on.
--attachment-host likewise requires --attachment-port: alone it would name an interface
for a listener that does not exist.
Two ports are not two surfaces unless they bind two interfaces
This is the part that decides whether any of the above is worth anything. Read it before you deploy the split.
--attachment-port on its own separates the two surfaces inside the process. It does not
separate them on the network. Without --attachment-host the attachment listener inherits
whatever host --http bound — and --http 3000, the common form, names no host at all, so
Node binds the wildcard and both ports answer on every interface:
ms-365-mcp-server --http 3000 --trust-proxy-auth \
--enable-attachment-urls --attachment-port 3001 # NOT isolatedContainer networks grant a peer every port on a container, not one port. Put a
document-conversion sidecar on a shared bridge so it can fetch /attachment on 3001, and
that same sidecar can dial :3000/mcp — which under --trust-proxy-auth reads no
Authorization header at all and hands back the full tool catalogue. Nothing fails, nothing
is logged as an error, and the config looks exactly like the isolated one.
To make it real, give the two listeners different addresses, and put only the attachment address on the network the fetcher is on:
# docker compose — the MCP port on the agent's own bridge, the attachment port on the
# bridge shared with the converter. The converter can reach 3001 and cannot route to 3000.
services:
m365-mcp:
networks: { agent-net: { ipv4_address: 10.89.0.2 }, convert-net: { ipv4_address: 10.89.1.2 } }
command: >
--http 10.89.0.2:3000 --trust-proxy-auth
--enable-attachment-urls
--attachment-port 3001 --attachment-host 10.89.1.2
docglean:
networks: [convert-net]The MCP port is then unreachable from convert-net by binding — there is no socket
listening on that interface — rather than by a firewall rule that has to keep matching.
The server warns at startup if you run --trust-proxy-auth with --attachment-port while
both listeners still answer on a common interface (either sharing an address, or either one
on the wildcard). Both bound addresses are logged, read back from the socket rather than
from the flags, so Server listening on … and Attachment listener on … can be compared
directly.
--attachment-host takes a bare IPv4 address, IPv6 address (bracketed [::1] or bare
::1) or hostname. It is refused rather than coerced — --attachment-host 10.0.0.5:3001
is an error naming --attachment-port, not a bind to something else. Note that
MS365_MCP_ATTACHMENT_URL_BASE still must not be an IPv6 literal (the URL signature covers
the host and the two implementations normalise IPv6 differently); if you bind the listener
to an IPv6 address, name it in the base by hostname.
Point MS365_MCP_ATTACHMENT_URL_BASE at the attachment port. The server cannot check this
for you: the base is usually a container name on a network this process cannot resolve, so
a wrong port here shows up as a fetch failure in the sidecar, not an error here. Both the
base and the bound port are logged at startup, one line apart, for exactly that comparison.
The signature, and who checks what
dgk/dgx/dgs are not checked by this server on redemption, and that is deliberate.
They exist for the fetcher: a document-conversion sidecar that refuses to dial a private
address unless the URL carries a valid HMAC from an origin it has been configured to trust.
What authorises redemption here is the ticket. Verifying the signature on the way back in
would prove only that we minted the URL — which the ticket already proves — while coupling
redemption to the sidecar's clock and to the key surviving a restart.
The wire format is docglean-mcp's
signing.py (canonical_string), and src/lib/url-signing.ts is a port of it. The
canonical string is \n-joined: v1, lowercased scheme, lowercased host, the port always
explicit, the path, the remaining query with dgk/dgx/dgs removed and the rest sorted
and re-encoded, and the expiry. The test vectors in
test/attachment-url-signing.test.ts were verified against the Python implementation byte
for byte — three places where the obvious JavaScript disagrees with Python (!*'()
escaping, + decoding as a space, and code-point vs UTF-16 sort order) are why that check
exists rather than being assumed.
The ticket travels in the query, not the path, because the verifying sidecar keeps a fetched URL's path in its error messages and strips the query.
Not available in OAuth/OBO mode
Identity there arrives per request on the caller's Authorization header, and a ticket is
redeemed later by a fetcher that sends none. Minting refuses with an explanation rather
than producing a URL that always fails.
Token Storage
Authentication tokens are stored in an encrypted file (AES-256-GCM). Only the 32-byte encryption key goes to the OS credential store via keytar.
The cache itself is too big for some credential stores to hold - a Windows Credential Manager blob caps out at 2560 bytes and a real token cache is several times that, so on Windows the write could never succeed. A key is 32 bytes regardless of how many accounts are signed in, so this works the same way on every platform.
Default paths are in the per-user config directory:
Platform | Location |
Windows |
|
macOS |
|
Linux |
|
Earlier versions defaulted to a path inside the installed package, which under npx resolves to a content-hashed cache directory that npm cache clean or a version bump throws away. A cache still sitting in the package directory is moved to the new location on first run.
That covers global and local installs, and npx when the hash has not changed. It cannot reach a cache left behind in a previous npx hash directory, so upgrading an npx install one last time means signing in again. Adopting a cache from another directory would mean trusting a directory this package cannot prove it wrote, which is not worth one saved sign-in.
Override the paths if you need to:
export MS365_MCP_TOKEN_CACHE_PATH="$HOME/.config/ms365-mcp/.token-cache.json"
export MS365_MCP_SELECTED_ACCOUNT_PATH="$HOME/.config/ms365-mcp/.selected-account.json"Parent directories are created automatically. Files are written with 0600 permissions.
Without a credential store (headless Linux, most containers) the key is written to .cache-key next to the cache file, with 0600 permissions. That stops the tokens showing up in a stray cat, a backup or an accidental commit. It does not protect against anyone who can already read the directory - the key is right there. Use MS365_MCP_AUTH_CACHE_COMMAND below if you need the cache in a real secret store.
Skipping the credential store on purpose:
export MS365_MCP_USE_KEYTAR=0 # also accepts false, no or offThe key then goes to .cache-key on every platform, exactly as it does where no credential store exists, and nothing in the server calls keytar. Useful when the credential store prompts on each start - macOS re-asks whenever the calling binary changes, which under npx is every version bump - or when the native module misbehaves on your platform rather than simply failing to load. Any other value leaves the credential store in use, and an unrecognised one is warned about rather than passed over silently.
Switching it off strands a cache that was encrypted under a key already in the credential store, since nothing can reach that key any more. The server says so and replaces that cache on the next sign-in, which signs out every account it held, not just the one you sign back in as. Unset the variable first if that cache is worth keeping.
Only a cache that nothing on the machine can open is replaced. One that fails to decrypt while a usable key is sitting right there - a truncated file, a downgrade to an older build, a cache from somewhere else - is damage rather than a stranded cache, and is left alone exactly as it is by default.
Two things it deliberately does not do. It never deletes what this server already put in the credential store, on logout or otherwise, because reaching the store is the thing you just asked it to stop doing - clear the ms-365-mcp-server entries by hand if you want them gone. And a .cache-key that exists but cannot be read (wrong owner on a bind-mounted config directory, say) is treated as recoverable rather than missing: the server refuses both to overwrite a cache and to mint a replacement key, and says so, rather than deleting a key that would work again once the permissions are fixed. Fix the permissions, or delete .cache-key yourself to start over - which does mean signing in again.
If the cache cannot be decrypted - key lost, keychain locked, file modified - you are asked to sign in again rather than the server failing to start. The cache file is left exactly as it was: not deleted, and not overwritten by that new sign-in either. A keychain that is merely locked usually reads fine on the next start, and the cache is still there when it does.
The cost is that the new session is not saved while this lasts, so each start asks you to sign in again. If the key is genuinely gone and the cache will never open, delete .token-cache.json to start over - the log says so, and names the path.
Hosted/sandboxed environments (e.g. Anthropic Cowork): Set
MS365_MCP_TOKEN_CACHE_PATHandMS365_MCP_SELECTED_ACCOUNT_PATHto a persistent mount so tokens survive between sessions.
External auth-cache command
Headless local-MSAL deployments can replace the built-in keytar/file storage with a provider-neutral external command:
export MS365_MCP_AUTH_CACHE_COMMAND="/path/to/ms365-auth-cache-store"
export MS365_MCP_AUTH_CACHE_COMMAND_TIMEOUT_MS=10000When MS365_MCP_AUTH_CACHE_COMMAND is set for a local auth flow, the server uses only that command for the MSAL token cache and selected-account metadata. It does not fall back to keytar or local files. If the command path is missing, not executable on POSIX, exits non-zero, times out, or returns malformed data, auth-cache operations fail closed with a sanitized error message.
The value must be a real executable wrapper path. It is not a shell command string, and there is no companion args environment variable. Put any interpreter, region, profile, or provider-specific settings inside the wrapper. Windows users should point the variable at a wrapper executable or script that can be launched directly by Node without shell parsing.
The server invokes the wrapper with:
$MS365_MCP_AUTH_CACHE_COMMAND load token-cache
$MS365_MCP_AUTH_CACHE_COMMAND save token-cache
$MS365_MCP_AUTH_CACHE_COMMAND delete token-cache
$MS365_MCP_AUTH_CACHE_COMMAND load selected-account
$MS365_MCP_AUTH_CACHE_COMMAND save selected-account
$MS365_MCP_AUTH_CACHE_COMMAND delete selected-accountProtocol v1:
load <key>reads no stdin. Exit0with{"found":true,"value":"<stored envelope string>"}when present. A miss is exit0with{"found":false}or empty stdout.save <key>receives{"value":"<stamped envelope string>"}on stdin and must exit0only after the value is durably committed. There are no fire-and-forget or coalesced saves in v1.delete <key>reads no stdin and exits0whether the key existed or not.<key>istoken-cacheorselected-account.Any non-zero exit is a storage error. Do not use exit code
2for cache misses.Stderr is captured and truncated in sanitized errors. Stdin and stdout payloads are never logged by the server.
Token-cache payloads can be large; wrappers should handle at least 256 KB values.
Normal stateless HTTP Graph requests do not use local auth-cache storage. In HTTP mode, command storage is skipped at startup and per request unless local auth tools are explicitly enabled or a local account command such as --login, --verify-login, --list-accounts, --select-account, or --logout is used.
Azure Key Vault Integration
For production deployments, you can store secrets in Azure Key Vault instead of environment variables. This is particularly useful for Azure Container Apps with managed identity.
Setup
Create a Key Vault (if you don't have one):
az keyvault create --name your-keyvault-name --resource-group your-rg --location eastusAdd secrets to Key Vault:
az keyvault secret set --vault-name your-keyvault-name --name ms365-mcp-client-id --value "your-client-id" az keyvault secret set --vault-name your-keyvault-name --name ms365-mcp-tenant-id --value "your-tenant-id" # Optional: if using confidential client flow az keyvault secret set --vault-name your-keyvault-name --name ms365-mcp-client-secret --value "your-secret"Grant access to Key Vault:
For Azure Container Apps with managed identity:
# Get the managed identity principal ID PRINCIPAL_ID=$(az containerapp show --name your-app --resource-group your-rg --query identity.principalId -o tsv) # Grant access to Key Vault secrets az keyvault set-policy --name your-keyvault-name --object-id $PRINCIPAL_ID --secret-permissions get listFor local development with Azure CLI:
# Your Azure CLI identity already has access if you have appropriate RBAC roles az loginConfigure the server:
MS365_MCP_KEYVAULT_URL=https://your-keyvault-name.vault.azure.net npx @softeria/ms-365-mcp-server
Secret Name Mapping
Key Vault Secret Name | Environment Variable | Required |
ms365-mcp-client-id | MS365_MCP_CLIENT_ID | Yes |
ms365-mcp-tenant-id | MS365_MCP_TENANT_ID | No (defaults to 'common') |
ms365-mcp-client-secret | MS365_MCP_CLIENT_SECRET | No |
Authentication
The Key Vault integration uses DefaultAzureCredential from the Azure Identity SDK, which automatically tries multiple authentication methods in order:
Environment variables (AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID)
Managed Identity (recommended for Azure Container Apps)
Azure CLI credentials (for local development)
Visual Studio Code credentials
Azure PowerShell credentials
Optional Dependencies
The Azure Key Vault packages (@azure/identity and @azure/keyvault-secrets) are optional dependencies. They are only loaded when MS365_MCP_KEYVAULT_URL is configured. If you don't use Key Vault, these packages are not required.
Message Signoff
Outgoing messages can be wrapped in a configurable signoff (e.g. a 🤖 prefix) so recipients can tell agent-sent messages from ones you typed yourself. Off by default — enable it with --message-signoff-prefix / --message-signoff-suffix (env: MS365_MCP_MESSAGE_SIGNOFF_PREFIX / MS365_MCP_MESSAGE_SIGNOFF_SUFFIX); --no-message-signoff or an empty env value turns it back off.
Once configured, it applies to all Teams messages (sends, replies and edits, including via graph-batch), to direct mail sends (send-mail, reply/forward, their shared-mailbox variants, and group thread replies), and to mail drafts as their content is written — send-draft-message sends a draft as-is, so a draft you wrote yourself goes out untouched. A message that already carries the marker is not signed twice, and a send whose body cannot take the signoff is refused rather than sent unsigned.
Markers may contain markup (e.g. a coloured <span>) as long as it renders visible text. Note that the signoff is a guardrail against an agent misusing the tools it was given, not a hard security boundary — an agent with shell access on the same machine could simply restart the server without it.
Production Deployment
See docs/deployment.md for a full guide to hosting the server for organization-wide access, including Docker, Azure Container Apps, Azure App Service, Azure AD app registration, reverse proxy setup, client configuration, and exposed endpoints.
Contributing
We welcome contributions! Before submitting a pull request, please ensure your changes meet our quality standards.
Run the verification script to check all code quality requirements:
npm run verifyFor Developers
After cloning the repository, you may need to generate the client code from the Microsoft Graph OpenAPI specification:
npm run generateRelated Projects
ms-365-admin-mcp-server by @okapi-ca: companion server for admin/daemon scenarios using application permissions (client credentials flow), covering security alerts, audit logs, service health, and usage reports.
Support
If you're having problems or need help:
Create an issue
Start a discussion
Email: eirikb@eirikb.no
Discord: https://discord.gg/WvGVNScrAZ or @eirikb
License
MIT © 2026 Softeria
Available Tools
188 toolsaccept-calendar-eventaccept-calendar-eventADestructive
Accept the specified event in a user calendar.
💡 TIP: Accepts a meeting invitation. Optional body: { sendResponse: true, comment: 'I will attend.' }. Set sendResponse to false to accept silently without notifying the organizer.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag the operation as destructive and not read-only. The description adds valuable context by explaining that the organizer is notified by default unless sendResponse is set to false, and it provides an example of the optional body. This goes beyond the annotations and clarifies the side effect of notifying the organizer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and a tip. The purpose is front-loaded, and the tip provides a compact, actionable clarification. No unnecessary words, and the structure flows logically from purpose to usage detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters and a nested object, the description covers the primary action and key behavior (organizer notification). The schema handles the remaining parameters, including the confirm gate. It does not mention the confirm parameter, but that is documented in the schema, so the description is mostly complete. It could be slightly richer about destructive implications, but the annotations compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (80%), but the description enhances parameter understanding by showing an example of the body parameter with sendResponse and comment, and explicitly explains that sendResponse: false suppresses organizer notification. This adds meaning beyond the schema's default value and property types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Accept the specified event in a user calendar.' It also specifies it accepts a 'meeting invitation' in the tip, which distinguishes it from sibling tools like decline-calendar-event or cancel-calendar-event. This is a specific verb+resource with enough context to understand its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus its many sibling calendar-event actions (e.g., tentatively-accept-calendar-event, decline-calendar-event). It only explains the optional sendResponse behavior, but no selection criteria or alternatives are mentioned, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-excel-table-rowsadd-excel-table-rowsADestructive
Add Excel table rows.
💡 TIP: Adds rows to a table. Body: { values: [['col1val', 'col2val', 'col3val'], ['row2col1', 'row2col2', 'row2col3']] }. Each inner array is one row. Values must match the number of columns in the table.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookTableId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=false and destructiveHint=true, indicating this is a mutating operation. The description does not add behavioral context beyond that, such as confirming that rows are appended to the end of the table, that it does not modify existing rows, or any side effects like overwriting data if the table changes. With no additional context, an agent knows it is destructive but not the precise behavior, which is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, using a single line for the core action and a well-formatted tip that provides the essential body example. It is front-loaded with the primary purpose, and every element earns its place: the action, the body template, and the column-count constraint. There is no verbose or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (nested body, 4 required parameters) and no output schema, the description adequately covers the key usage: how to structure the values array and the column constraint. However, it does not mention what happens after execution (e.g., returns the added rows) or the confirm gate behavior (though confirm is documented in the schema). This is acceptable for a simple tool, but a mention of the append operation's effect would have made it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers most parameters (86% coverage), but the description adds crucial semantics for the 'body' parameter by showing the exact structure: an array of arrays where each inner array is a row. It also clarifies the constraint that values must match the number of columns. This goes beyond the schema's terse description of 'values' and helps the agent construct a correct payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Add Excel table rows.' This clearly distinguishes it from sibling tools like list-excel-table-rows, update-excel-table-row, and delete-excel-table-row. The added tip reinforces the action by showing an example of the body payload, so an agent can immediately grasp the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives such as update-excel-table-row or delete-excel-table-row. The purpose is implied by the name, but there is no explicit 'use this when you need to append rows' or 'use this instead of update for new rows.' This leaves some ambiguity for an agent choosing among the Excel table row operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-mail-attachmentadd-mail-attachmentADestructive
Use this API to create a new Attachment. An attachment can be one of the following types: All these types of attachment resources are derived from the attachment resource.
💡 TIP: The only path for attachments under 3MB. contentBytes must carry the complete base64 verbatim; a truncated argument fails with 400 UnableToDeserializePostBody. At 3MB and above use create-mail-attachment-upload-session, which rejects anything smaller. Body requires @odata.type: {"@odata.type": "#microsoft.graph.fileAttachment", "name": "file.pdf", "contentBytes": ""}.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the mutation nature is known. The description adds significant behavioral detail: the 400 error on truncated base64, the size threshold, and the required @odata.type in the body. It does not contradict annotations and provides extra context about failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise but has a truncated sentence: 'An attachment can be one of the following types: All these types of attachment resources are derived from the attachment resource.' This is incomplete and adds noise. However, the key tip is well-structured and front-loaded, earning points for overall efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it's a mutation tool with destructiveHint and no output schema, the description covers the critical context: size limits, body format, and alternative tool. It doesn't describe return values, but that's not expected without an output schema. It is complete enough for an agent to execute correctly, with minor gaps like not explaining other parameters (confirm, includeHeaders).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description goes beyond the schema by specifying that the body must include @odata.type with a concrete example. This is critical because the schema only lists generic fields like name and size, not the required structure. The description compensates for the schema's lack of required format, making the body parameter semantics clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'create a new Attachment' with a specific verb and resource. It distinguishes itself from the sibling create-mail-attachment-upload-session by explicitly stating it is for attachments under 3MB, making it unambiguous which tool to use for small attachments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage criteria: 'The only path for attachments under 3MB' and instructs to use create-mail-attachment-upload-session for 3MB and above. It also warns about truncation failure with a specific error, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel-calendar-eventcancel-calendar-eventADestructive
This action allows the organizer of a meeting to send a cancellation message and cancel the event. The action moves the event to the Deleted Items folder. The organizer can also cancel an occurrence of a recurring meeting by providing the occurrence event ID. An attendee calling this action gets an error (HTTP 400 Bad Request), with the following error message: 'Your request can't be completed. You need to be an organizer to cancel a meeting.' This action differs from Delete in that Cancel is available to only the organizer, and lets the organizer send a custom message to the attendees about the cancellation.
💡 TIP: Cancels a meeting (organizer only) and sends a cancellation message to all attendees. Body: { Comment (optional string, custom message) }. Use this instead of delete-calendar-event when you want attendees to see 'Canceled' in their calendar. Attendees calling this get HTTP 400 — they should use decline-calendar-event instead.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds substantial behavior: the event is moved to Deleted Items, it can cancel occurrences of recurring meetings, it sends a cancellation message, and attendees get an HTTP 400 error. These are behavioral traits not covered by annotations. While the description doesn't explicitly mention the confirm gate parameter, that is documented in the schema. It adds significant context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but somewhat verbose, with a detailed first paragraph and a separate tip. However, it is well-structured: the purpose is front-loaded, then details, then a quick-reference tip. Every sentence adds value, though there is slight repetition of the cancellation purpose between the first paragraph and the tip. Not overly long for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with organizer-only semantics, recurring event support, and error behavior, the description covers all key aspects: what it does, the move to Deleted Items, the custom message, the difference from delete, and the attendee error. No output schema exists, so explaining return values is not required. An agent has sufficient information to decide when and how to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so most parameters are documented. The description only adds a mention of the Comment field in the tip, which is already in the schema. It doesn't provide additional meaning for parameters like eventId or confirm beyond what the schema offers. The baseline for high coverage is 3, and the description doesn't elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: the organizer of a meeting can cancel an event and send a cancellation message. It specifies the resource (calendar event) and the action (cancel), and distinguishes it from delete-calendar-event and decline-calendar-event by noting the organizer-only restriction and the ability to send a custom message. This fully differentiates it from siblings without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool instead of delete-calendar-event (when attendees should see 'Canceled') and directs attendees to use decline-calendar-event instead. It also explains the error condition for attendees, giving clear guidance on when not to use the tool. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear-excel-rangeclear-excel-rangeADestructive
Clear an Excel range.
💡 TIP: Clear cell contents and/or formatting on the given range. Body: { applyTo: 'All' | 'Formats' | 'Contents' }. 'Contents' wipes values but keeps formatting; 'Formats' resets styling but keeps values; 'All' wipes both. Use this to reset a worksheet section before a fresh write rather than overwriting cell-by-cell.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true, so the description doesn't need to restate that. It adds valuable behavior details about what each applyTo value does (wipes values vs resets formatting vs both), which goes beyond the annotation. It does not contradict annotations and provides useful context for resetting worksheet sections.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core purpose ('Clear an Excel range'), and then provides a concise, high-value tip. There is no fluff; every sentence earns its place. The structure is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive clear operation, the description covers the key behavior (what gets cleared), the options, and a typical use case. The schema handles the remaining parameters (path segments, confirm, etc.). No critical information is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 88% coverage and already documents most parameters. The description significantly enriches the body.applyTo parameter by explaining the allowed values and their exact effects, which the schema only lists as a string. This adds meaningful semantics beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Clear an Excel range') with a specific resource and intent. It also explains the three modes (Contents, Formats, All) and their effects, which distinguishes it from sibling tools like update-excel-range or format-excel-range. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip gives concrete usage context: 'Use this to reset a worksheet section before a fresh write rather than overwriting cell-by-cell.' This explains when to apply the tool, but it does not explicitly name alternative tools or state when not to use it. Still, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy-drive-itemcopy-drive-itemADestructive
Copy a drive item.
💡 TIP: Asynchronously copy a file or folder to a new location and/or name. Body: { parentReference: { driveId: '...', id: '...' }, name?: 'New Name.xlsx' }. Returns 202 Accepted with a Location header pointing at a monitor URL for the async job. Ideal for duplicating templates (e.g. clone an Armhr Census Template per prospect), bulk file provisioning, or preserving an immutable snapshot of a working file.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's semantics ('copy', 'duplicating', 'preserving an immutable snapshot') directly conflict with annotations' destructiveHint=true. Even though the description usefully discloses async execution and the 202/Location monitor response, the rubric requires a score of 1 when the description contradicts an annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the operation, then gives a compact body example, response note, and use cases. It is efficient and scannable, though the three-item use-case list is slightly more expansive than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, mentioning '202 Accepted with a Location header pointing at a monitor URL' is helpful, but the async workflow is incomplete: it never says to poll the monitor URL, explains failure behavior, or covers body options such as childrenOnly and includeAllVersionHistory. Adequate, but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema does most of the parameter documentation work. The description adds value beyond it with a concrete body example ('parentReference: { driveId: '...', id: '...' }, name?: 'New Name.xlsx'') and by connecting the 'new location and/or name' idea to the body fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Copy a drive item' and elaborates 'Asynchronously copy a file or folder to a new location and/or name.' This gives a specific verb, resource, and scope, and it is naturally distinct from sibling move, delete, and share operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete when-to-use guidance: 'Ideal for duplicating templates..., bulk file provisioning, or preserving an immutable snapshot.' It clearly sets context but does not explicitly state when not to use the tool or name alternatives, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy-mail-messagecopy-mail-messageADestructive
Copy a message to a folder within the user's mailbox.
💡 TIP: Copies a message to another mail folder. Body: { DestinationId: '<mailFolder-id or well-known name like inbox, archive, junkemail>' }. Returns the newly created message (with a new id) in the destination folder. For moving instead of copying, use move-mail-message.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false and destructiveHint=true, so the safety profile is known. The description adds behavioral context by specifying that it returns a newly created message with a new id, and it clarifies the destination folder format. It does not contradict the annotations, and it provides sufficient detail about the operation's effect and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first sentence states the core purpose, the tip line expands on the body and return value, and the final sentence routes the user to the sibling tool. No redundant words, front-loaded with key info, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, nested object) and no output schema, the description covers the essential usage: body structure, return value, and alternative. It does not dwell on confirm/includeHeaders/excludeResponse, but those are self-explanatory and documented in the schema. Minor gaps like permission requirements or error cases are not critical for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 80% of parameters with descriptions. The description adds meaningful semantics to the DestinationId parameter by providing concrete examples like 'inbox, archive, junkemail' and clarifying it accepts a well-known name or ID. This goes beyond the schema's generic string type and helps an agent format the request correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Copy a message to a folder within the user's mailbox.' It identifies the resource (message), the operation (copy), and the destination (folder). It also explicitly differentiates from the sibling tool by stating 'For moving instead of copying, use move-mail-message,' which disambiguates it from similar operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use this tool versus alternatives: it copies a message, and for moving, it points to move-mail-message. This explicit guidance helps the agent choose correctly. It also explains the body structure and return value, providing operational context within the same description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-calendarcreate-calendarADestructive
Create a new calendar for a user.
💡 TIP: Creates a new personal calendar. Body: { name: 'My Calendar', color: 'auto' }. Available colors: auto, lightBlue, lightGreen, lightOrange, lightGray, lightYellow, lightTeal, lightPink, lightBrown, lightRed, maxColor.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it creates a personal calendar and provides a body example and color list, but does not describe side effects, confirmation requirements (only in schema), or permission needs. The annotations (destructiveHint) are not contradicted, but the description adds little beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, stating the main action first and a helpful tip with a body example. It is efficient with no fluff, though the informal 'TIP' style is slightly non-standard.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives enough for basic use (name and color) but does not clarify the full scope of the body object, read-only restrictions, or the openWorldHint behavior. Given the complex schema, it leaves some ambiguity for advanced usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers parameters extensively (75% coverage). The description adds a concrete body example and lists valid color values, but these are largely redundant with the schema's enum and descriptions, adding marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Create' and the resource 'a new calendar', with a specific body example. It is unambiguous and distinct from sibling tools like create-calendar-event or list-calendars.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool's purpose but does not provide guidance on when to use it vs alternatives, nor conditions or exclusions. It lacks context such as prerequisites, when to prefer other calendar tools, or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-calendar-eventcreate-calendar-eventADestructive
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.
💡 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true/openWorldHint=true. The description adds non-obvious behavioral context: Graph resolves DST against start.timeZone so UTC drifts for recurring events, and the requirement to look up recipient addresses rather than guess. It still does not say that invites are dispatched to attendees or note the confirm gate (the latter only appears in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and payload shape, then layered guidance. Almost every sentence carries actionable detail; the '💡 TIP: CRITICAL:' double-marker is mild redundancy but the content itself is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and a complex nested payload, the description supplies the timezone semantics, payload shape, and attendee-address lookup that an agent needs to call it correctly. Remaining gaps (side effects like invite delivery, permission requirements) are notable but secondary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage the baseline is 3, and the description goes beyond by explicitly warning against flat startDateTime/startTimeZone fields and giving a concrete zone example. It does not cover confirm/includeHeaders/excludeResponse, but adds meaningful shape guidance the schema alone doesn't emphasize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create (schedule) a new calendar event — a meeting or appointment — on the user's calendar') and emphasizes nested object shape, distinguishing it from flat-field siblings like update-calendar-event. An agent can identify the operation and the required payload shape without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: use UTC for one-off events, the organizer's zone for recurring events, avoid guessing emails, validate zones with list-supported-time-zones or get-mailbox-settings. It names specific sibling helpers and the condition that routes to them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-contact-child-foldercreate-contact-child-folderADestructive
Create a new contactFolder as a child of a specified folder. You can also create a new contactFolder under the user's default contact folder.
💡 TIP: Creates a sub-folder under an existing contact folder. Body: { displayName: 'Sub-folder name' }. Use list-contact-folders to discover the parent id. The returned contactFolder has its own id usable with update-contact-folder, delete-contact-folder, list-contact-folder-contacts, and create-contact-in-folder — contactFolder ids are mailbox-unique regardless of nesting depth.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| contactFolderId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contradicts the annotations: annotations mark destructiveHint=true, yet the description says 'Create' which is a non-destructive operation. No additional behavioral context is provided beyond what the annotations already state (readOnlyHint=false, destructiveHint=true). The description does not mention side effects, reversibility, or confirmation requirements, and the contradiction makes it misleading. Flagging as annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence clearly states the purpose, followed by a tip with emoji that contains the body format, parent discovery, and return ID usage. It is moderately long but every sentence carries useful information. The tip could be more integrated, but the structure is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-object schema with five parameters, the description covers the essential usage: how to format the body, how to obtain the parent ID, and how to use the returned folder's ID with other tools. It omits mention of the confirm gate (present in schema) but that is already documented in the parameter description. Overall, the agent has enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds valuable semantics beyond the schema: it gives an explicit body example '{ displayName: 'Sub-folder name' }' and tells the agent to use 'list-contact-folders' to discover the parent ID. This compensates for the schema's generic descriptions and provides practical guidance for the required parameters (body and contactFolderId).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Create' and the resource 'contactFolder' as a child of a specified folder or the user's default folder. It distinguishes itself from the sibling 'create-contact-folder' by emphasizing 'child' and 'sub-folder', making its scope unambiguous. The purpose is clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage instruction: 'Use list-contact-folders to discover the parent id.' It also covers two scenarios (under specified folder or default folder). However, it does not explicitly contrast with the root-folder creation tool 'create-contact-folder', relying on implication rather than stating when not to use this tool. This is a minor gap but the provided guidance is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-contact-foldercreate-contact-folderCDestructive
Create a new contactFolder under the user's default contacts folder. You can also create a new contactfolder as a child of any specified contact folder.
💡 TIP: Creates a new contact folder under the user's mailbox root. Body: { displayName: 'Family' }. Returns the created contactFolder with its id. To create a sub-folder under an existing folder, use create-contact-child-folder.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the description adds little beyond that. It mentions the return value (created contactFolder with id), but it does not disclose side effects, permission requirements, or behavior related to the confirm parameter. Moreover, it introduces a potentially misleading capability (child creation) without clarifying the actual behavior, which is a transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences plus a tip, but the first sentence is redundant and confusing because it repeats a claim later contradicted by the tip. The tip is concise and useful, but the overall structure would benefit from removing the conflicting opening and stating the intended scope upfront.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return value (created contactFolder with id) and a simple example, which is helpful given there is no output schema. However, it fails to clarify the exact creation scope (default vs. child) and does not explain other required parameters beyond displayName. The ambiguity about child folder creation leaves a significant gap in an agent's ability to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 75% description coverage and already documents most parameters, so the baseline is 3. The description adds a concrete body example ({ displayName: 'Family' }) which is helpful, but it does not explain how to specify a parent folder (e.g., via parentFolderId) and instead redirects that use case to a sibling. This adds some value but not comprehensive parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb and resource clearly ('create a new contactFolder'), but the scope is ambiguous: the first sentence claims it can create under the default folder or as a child of a specified folder, while the tip says to use create-contact-child-folder for sub-folder creation. This internal contradiction weakens the clarity of what the tool actually does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the sibling create-contact-child-folder for sub-folder creation, which is good guidance. However, the opening sentence contradicts this by implying this tool can also create child folders, so the when-to-use guidance is muddy. The tip partially clarifies, but the conflict reduces confidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-contact-in-foldercreate-contact-in-folderADestructive
Add a contact to the root Contacts folder or to the contacts endpoint of another contact folder.
💡 TIP: Creates a contact inside a specific folder (instead of the default Contacts folder). Body is a contact resource: { givenName, surname, displayName, emailAddresses: [{ address, name }], businessPhones: [], mobilePhone, jobTitle, companyName, ... }. The existing create-outlook-contact (POST /me/contacts) writes to the default folder only; use this when organizing contacts into named folders. Get the folder id via list-contact-folders.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| contactFolderId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about behavior by specifying it creates contacts in specific folders and points out the need for a folder id. Annotations already indicate a write operation (readOnlyHint=false, destructiveHint=true), so the description complements them with scope. It does not mention confirmation gate or error handling, but those are covered in the schema's confirm parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the core purpose in the first sentence and a separate tip block for additional guidance. It is front-loaded with the primary action and uses a clear, scannable structure with an emoji. Minimal waste, though the tip could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with nested body objects and response-handling parameters (includeHeaders, excludeResponse), yet the description does not mention what the response contains (e.g., the created contact object). It covers main usage but omits failure conditions and output details. The schema covers parameters, but the description could be more complete about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives an example body structure but largely duplicates the schema's detailed property descriptions. It adds the hint to use the 'id' field for contactFolderId, which is also in the schema. Given high schema coverage (80%), the description does not significantly enhance parameter understanding, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Add a contact to the root Contacts folder or to the contacts endpoint of another contact folder.' It also names the sibling create-outlook-contact and distinguishes this tool from it, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given on when to use this tool: 'The existing create-outlook-contact (POST /me/contacts) writes to the default folder only; use this when organizing contacts into named folders.' It also instructs to get the folder id via list-contact-folders, providing a complete usage path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-draft-emailcreate-draft-emailADestructive
Create a draft Outlook email message in the signed-in user's Drafts folder. Set subject, body, toRecipients, ccRecipients, and importance. The draft is saved, not sent — use send-mail to send a message directly, or send the draft afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, so the write nature is already known. The description adds genuine behavioral context beyond that: the draft is persisted to the Drafts folder and is NOT sent, which materially affects how an agent sequences this call. Given annotations already carry the safety profile, this is solid added value without contradicting anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: purpose and location first, then settable fields, then the critical save-vs-send disambiguation. No filler or redundancy; every sentence earns its place. Could perhaps front-load the 'not sent' clarification even earlier, but the structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a draft-creation tool with annotations covering the write/destructive profile, the description captures the essential behavior: it saves a draft, names the settable fields, and disambiguates from sending. Optional fields like attachments and bcc are absent but are documented in the schema body nested properties. The confirm-gate parameter is self-documented in the schema, so no gap there. An agent can call this correctly with the given information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (moderately high), so the schema documents most parameters. The description names the key message fields (subject, body, toRecipients, ccRecipients, importance) which maps to nested schema properties and adds modest orientation for an agent. It does not add format or syntax details beyond the schema, so a 3 baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource+scope: 'Create a draft Outlook email message in the signed-in user's Drafts folder.' It names the settable fields (subject, body, toRecipients, ccRecipients, importance) and explicitly contrasts itself with send-mail by stating the draft is saved, not sent. An agent can immediately tell what this tool does and how it differs from send-mail/send-draft-message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use context: it states the draft is not sent and points to send-mail as the alternative for direct sending ('use send-mail to send a message directly, or send the draft afterwards'). However, among the large sibling set there are create-forward-draft, create-reply-draft, and create-reply-all-draft, which are not explicitly excluded; the phrase 'draft Outlook email message' only indirectly implies a fresh draft. Some exclusion guidance for those variants would push this to 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-drive-item-previewcreate-drive-item-previewADestructive
Create a drive item preview.
💡 TIP: Generate a short-lived embeddable preview URL for a file (Office docs, PDFs, images). Body: { page?: number | string, zoom?: number, viewer?: 'onedrive' | 'office' }. Returns getUrl (interactive) and postUrl (form-post). Useful for surfacing inline previews in summary emails or chat messages without needing the recipient to open the file.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare destructiveHint: true, but the description describes a benign 'create preview' operation with no mention of destructive side effects. This directly contradicts the annotation. The description gives the impression of a safe, non-destructive action, which is misleading given the annotation. This is a serious inconsistency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the core action, and uses a tip to provide key details. It includes body structure and return values in a compact format, with no redundant text. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main functional aspects, use case, and return values, but fails to disclose the destructive nature indicated by annotations. Without that disclosure, the agent may make an incorrect safety assessment. While the schema and output information are adequate, the destructiveHint contradiction makes the description incomplete for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), but the description adds value by specifying the body fields (page, zoom, viewer) and explaining the return values (getUrl and postUrl). It also clarifies the purpose of the body. While it doesn't detail driveId/driveItemId, those are already described in the schema. The additional viewer option (not in schema properties) is useful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Create a drive item preview') and explains the purpose: generates a short-lived embeddable preview URL for files. It differentiates from sharing tools by emphasizing previews for inline use in emails/chats. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('surfacing inline previews in summary emails or chat messages') and notes the URLs are short-lived and embeddable. It does not explicitly exclude alternatives like share links, but the context makes the intended scenario clear. Sufficient guidance for most agents, though not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-excel-chartcreate-excel-chartCDestructive
Creates a new chart.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint: true and readOnlyHint: false, so the tool is known to mutate data. The description adds no behavioral context beyond that—it doesn't disclose that it modifies the workbook, that confirmation may be required, or any side effects. It does not contradict annotations, but it also doesn't add value over them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short—one sentence—which is concise in length but not in usefulness. It omits essential context, making it under-specified rather than efficiently concise. Important information about usage and parameters is missing entirely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex operation requiring a workbook driveItem, worksheet, and a body describing chart details. Without any explanation of these requirements, the description is completely inadequate. It doesn't mention that the operation is destructive, that confirmation might be gated, or what the expected inputs are. An agent cannot call this tool correctly based on the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, but the tool description adds nothing about parameters. The body parameter's subproperties (type, seriesBy, sourceData) are undocumented in both the schema and the tool description. With high schema coverage, the baseline is 3, but the description fails to explain what kind of data to pass, especially for the body object, which is critical for chart creation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Creates a new chart,' which identifies the verb and resource clearly. However, it provides no context about what kind of chart, where it is created, or how it relates to the Excel workbook. It does not distinguish itself from other Excel tools in the sibling list, though no other chart-creation tool exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description says nothing about the required workbook/worksheet context or that it modifies an existing Excel file. No exclusions or alternative tool recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-excel-tablecreate-excel-tableADestructive
Create a new table. The range source address determines the worksheet under which the table will be added. If the table can't be added (for example, because the address is invalid, or the table would overlap with another table), an error is generated.
💡 TIP: Convert a worksheet range into a formal Excel table. Body: { address: 'A1:H171', hasHeaders: true }. Required before using add-excel-table-rows / update-excel-table-row / delete-excel-table-row on a plain-cells sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's a non-read-only, destructive-capable operation. The description adds an error condition (invalid address or overlap) and clarifies the address-to-worksheet mapping. It doesn't mention side effects like confirm-gate behavior (handled by schema note) or what the response contains, but it does add meaningful behavioral detail beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences plus a succinct tip. The core action is front-loaded, the error behavior is summarized, and the example is placed as a separate tip. No wasted words – every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, nested body, no output schema) and the schema's high coverage (86%), the description covers the essential use case, error conditions, and prerequisite relationship. It doesn't explain return values (no output schema) but is otherwise sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema lacks descriptions for the body's address and hasHeaders properties, but the description compensates with an explicit example ('Body: { address: 'A1:H171', hasHeaders: true }') and explains that the address determines the worksheet. This adds practical meaning beyond the schema's type-only definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new table') and clarifies the relationship to the worksheet via the address. It clearly differentiates from sibling table operations (list/get/update/delete rows) by focusing on creation. The tip reinforces the purpose: converting a range into a formal Excel table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when this tool is required: before using add/update/delete-excel-table-rows on a plain-cells sheet. This gives clear context and a prerequisite. It doesn't mention when not to use it, but the specificity of the prerequisite is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-focused-inbox-overridecreate-focused-inbox-overrideADestructive
Create an override for a sender identified by an SMTP address. Future messages from that SMTP address will be consistently classified as specified in the override. Note
💡 TIP: Creates a Focused Inbox override for a sender. Body: { classifyAs: 'focused', senderEmailAddress: { name: 'Display Name', address: 'sender@example.com' } }. classifyAs must be 'focused' or 'other'. If an override already exists for that SMTP address, POST updates the existing override's name and classifyAs (use this to rename a sender). Resolve the sender's address with list-users or by reading a recent mail header — do not invent SMTP addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (destructiveHint: true) and openWorldHint: true. The description adds behavioral context beyond that: it explains the upsert behavior ('If an override already exists for that SMTP address, POST updates the existing override's name and classifyAs') and clarifies that classifyAs must be 'focused' or 'other'. No contradiction with annotations, and the added context is valuable for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and front-loaded with the main purpose. It includes a practical tip and important constraints (e.g., do not invent addresses). While it's slightly longer than necessary, each part adds value and the structure (description followed by tip) aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested body schema, the upsert behavior, and the need for address resolution, the description is complete. It covers the body format, permissible classifyAs values, behavior on existing overrides, and how to obtain a valid sender address. There is no output schema, but the description doesn't need to explain return values; the essential operational details are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 75% of parameters, and the description enriches meaning by providing a concrete body example ({ classifyAs: 'focused', senderEmailAddress: { name: 'Display Name', address: 'sender@example.com' } }) and stating that classifyAs must be one of two values. It also emphasizes resolving the sender's address reliably, which is a key semantic point beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Create an override for a sender identified by an SMTP address' and the effect ('Future messages from that SMTP address will be consistently classified'). It is specific about the resource (Focused Inbox override) and distinguishes it implicitly from sibling tools like update-focused-inbox-override and delete-focused-inbox-override by describing the create/upsert behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: it creates an override and, if one already exists, it updates it (useful for renaming a sender). It also advises resolving the sender's address using list-users or reading a mail header, and explicitly says 'do not invent SMTP addresses'. However, it does not explicitly contrast with the sibling update-focused-inbox-override, so it lacks a direct 'when not to use this' exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-forward-draftcreate-forward-draftADestructive
Create a forward draft.
💡 TIP: Create a forward draft (does not send). Useful when user wants to review before sending.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint false, destructiveHint true, and openWorldHint true, which already inform the agent about mutation and flexibility. The description adds the valuable clarification 'does not send' — a behavioral guarantee beyond the annotations. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but redundant: the first sentence and the tip both repeat 'Create a forward draft.' The tip could be merged into a single sentence without losing meaning. It is not poorly structured, but it wastes a little space with repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema provides detailed parameter descriptions, including the requirement for messageId. However, the description does not mention that a forward requires an original message or that the body field structures the forward content. For a tool with nested objects and 5 parameters, the description relies heavily on the schema, which is mostly sufficient but lacks high-level context about the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters (messageId, confirm, etc.). The description adds no parameter-specific guidance. Per the rubric, with high schema coverage the baseline is 3, and there is no additional value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Create a forward draft') and immediately clarifies the critical distinction that it does not send. This differentiates it from siblings like send-mail, forward-mail-message, and create-reply-draft. The reader instantly knows what the tool does and why it exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear usage context: 'Useful when user wants to review before sending.' This tells the agent when to prefer this tool over a direct send. It does not explicitly name alternatives, but the hint implies the alternative (sending immediately) and the condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-mail-attachment-upload-sessioncreate-mail-attachment-upload-sessionADestructive
Create an upload session that allows an app to iteratively upload ranges of a file, so as to attach the file to the specified Outlook item. The item can be a message or event. Use this approach to attach a file if the file size is between 3 MB and 150 MB. To attach a file that's smaller than 3 MB, do a POST operation on the attachments navigation property of the Outlook item; see how to do this for a message or for an event. As part of the response, this action returns an upload URL that you can use in subsequent sequential PUT queries. Request headers for each PUT operation let you specify the exact range of bytes to be uploaded. This allows transfer to be resumed, in case the network connection is dropped during upload. The following are the steps to attach a file to an Outlook item using an upload session: See attach large files to Outlook messages or events for an example.
💡 TIP: For attachments 3MB to 150MB. Graph rejects smaller files with ErrorAttachmentSizeShouldNotBeLessThanMinimumSize, so under 3MB use add-mail-attachment instead. Body: { AttachmentItem: { attachmentType: 'file', name: 'report.pdf', size: 5000000 } }. Returns a pre-authenticated uploadUrl; the caller PUTs the bytes there itself in ranges up to 4MB. This server does not perform the PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool returns an upload URL and that the caller must perform sequential PUT operations, stating 'This server does not perform the PUT.' It also mentions the error for smaller files. The annotations (readOnlyHint=false, destructiveHint=true) are not contradicted; the description supplements them with the workflow and error scenario.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but organized with a clear explanation, example, and tip. It front-loads the purpose and usage, though it could be more concise by trimming redundant references. The structure is logical but could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the entire workflow: when to use, what to include in the body, that it returns an upload URL, and that the caller performs PUTs. Given there's no output schema, it adequately explains the expected output and next steps. Some details like exact PUT range headers are not covered but are standard for this pattern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides detailed parameter descriptions (80% coverage), and the description adds a concrete example for the body parameter, showing the structure with AttachmentItem fields. It also clarifies that messageId should be passed as 'messageId' not 'id', reinforcing the schema guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: create an upload session for attaching files to Outlook items (message or event). It explicitly distinguishes from the sibling 'add-mail-attachment' via the 3-150 MB size range, which is a specific verb+resource+scope definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (file size between 3 MB and 150 MB) and when not to (use POST on attachments for smaller files). It also notes the caller must perform PUTs, providing clear context and exclusions. The TIP reinforces the alternative 'add-mail-attachment' for under 3 MB.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-mail-child-foldercreate-mail-child-folderADestructive
Use this API to create a new child mailFolder. If you intend a new folder to be hidden, you must set the isHidden property to true on creation.
💡 TIP: Creates a subfolder inside an existing mail folder. Use list-mail-folders or list-mail-child-folders to find the parent folder ID.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| mailFolderId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a write operation (readOnlyHint false, destructiveHint true). The description adds the important nuance that isHidden must be set at creation time if desired, which is behavioral guidance beyond the schema's mere statement of the property. It does not contradict annotations, and the confirm parameter is documented in the schema, so it doesn't need repetition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences plus a tip, with the core purpose front-loaded. No redundant content, and the tip is directly actionable. It earns its place without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with a rich schema (5 params, 2 required, nested body), the description provides the essential context: what it does, how to get the parent ID, and the hidden-folder caveat. It does not describe the return value, but there is no output schema, so that is not required. The confirm parameter is covered in the schema, so the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%), so the baseline is 3. The description's mention of isHidden and the tip about using list tools to find the parent ID largely mirror what is already in the schema for body.isHidden and mailFolderId. It reinforces but does not add new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'create a new child mailFolder' and 'Creates a subfolder inside an existing mail folder.' This distinguishes it from sibling tool create-mail-folder (which likely handles top-level folders) and directly points to the list tools for locating the parent folder. The verb and resource are specific, and the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear tip on how to find the parent folder ID using list-mail-folders or list-mail-child-folders, which is essential for correct invocation. However, it does not explicitly state when not to use this tool (e.g., for top-level folders) nor mention the alternative create-mail-folder. It implies the use case via 'child' and 'subfolder' but lacks explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-mail-foldercreate-mail-folderADestructive
Use this API to create a new mail folder in the root folder of the user's mailbox. If you intend a new folder to be hidden, you must set the isHidden property to true on creation.
💡 TIP: Creates a top-level mail folder. Use create-mail-child-folder to create a subfolder inside an existing folder. Use list-mail-folders to find existing folder IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, indicating a write operation. The description adds valuable context beyond this: it specifies that folders are created at the root (top-level) and that isHidden can only be set at creation time. It does not mention side effects or error scenarios, but given the annotation coverage, a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a concise tip line. The main purpose is front-loaded, the hidden-folder condition is immediately relevant, and the tip efficiently lists alternatives and prerequisites. No redundant words or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation, the combination of description and schema provides enough information: the description states the operation and location, and the schema details all body properties (including displayName and isHidden). However, the description does not explicitly state that displayName is typically required (it's not marked required in the schema), nor does it mention potential error cases. Given that the agent can infer from the schema, but the omission of a required-field note is a gap, a 3 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (body lacks a direct description, while confirm, includeHeaders, and excludeResponse have descriptions). The description adds the isHidden nuance (that it must be set on creation), but it does not clarify which body properties are essential (e.g., displayName). The schema itself describes the subproperties, so the description provides some value but does not fully compensate for the missing body description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('create a new mail folder'), the resource ('mail folder'), and the location scope ('in the root folder of the user's mailbox'). It clearly distinguishes from the sibling 'create-mail-child-folder' by noting it creates only top-level folders, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (for top-level folders) and provides alternatives: 'Use create-mail-child-folder to create a subfolder inside an existing folder' and 'Use list-mail-folders to find existing folder IDs.' It also gives a conditional instruction ('If you intend a new folder to be hidden, you must set the isHidden property to true on creation'). This is clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-mail-rulecreate-mail-ruleADestructive
Create a messageRule object by specifying a set of conditions and actions. Outlook carries out those actions if an incoming message in the user's Inbox meets the specified conditions.
💡 TIP: Creates a message rule for a mail folder. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules. Body: { displayName: 'Rule name', sequence: 1, isEnabled: true, conditions: { fromAddresses: [{ emailAddress: { address: 'user@example.com' } }] }, actions: { moveToFolder: 'folder-id' } }. Actions: moveToFolder, copyToFolder, forwardTo, forwardAsAttachmentTo, delete, markAsRead, markImportance, stopProcessingRules.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| mailFolderId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (destructiveHint=true, readOnlyHint=false) already establish this is a mutating operation, and the description does not contradict them. Beyond annotations, it enumerates the eight supported actions (moveToFolder, copyToFolder, forwardTo, forwardAsAttachmentTo, delete, markAsRead, markImportance, stopProcessingRules), giving the agent concrete knowledge of what the tool can do.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by a compact tip and example. It is not verbose and every element (example, action list) earns its place, though the action list could arguably live in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a deeply nested body object, the description covers the actions fully and gives a representative conditions example. It does not enumerate all possible conditions, but the schema already documents those, so the description adequately complements the structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so a baseline of 3 applies, but the description adds genuine value by providing a complete inline example payload (displayName, sequence, isEnabled, conditions.fromAddresses, actions.moveToFolder) that clarifies the nested structure beyond what the schema alone communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Create a messageRule object') and explains the rule's behavior (Outlook carries out actions on inbox messages matching conditions). This clearly differentiates it from siblings like create-mail-folder, update-mail-rule, and list-mail-rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP section gives actionable guidance: use the Inbox folder ID from list-mail-folders, and it shows a representative body payload. It doesn't explicitly state when not to use this tool or name update-mail-rule as the alternative for modifying existing rules, but it does point the agent to the correct folder-ID source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-my-calendar-permissioncreate-my-calendar-permissionADestructive
Create a calendarPermission resource to specify the identity and role of the user with whom the specified calendar is being shared or delegated.
💡 TIP: Shares the user's primary calendar with another user (or sets up a delegate). Body: { emailAddress: { name: 'Adele Vance', address: 'adele@contoso.com' }, role: 'read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess', isInsideOrganization: true, isRemovable: true }. Use list-users to resolve the recipient SMTP. Returns the created calendarPermission with its id (used by update-my-calendar-permission and delete-my-calendar-permission).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's 'create' aligns with them. Beyond annotations, the description adds useful behavioral context: it shares the primary calendar, specifies the body structure, and notes the return value (id for subsequent operations). It doesn't disclose potential side effects like overriding existing permissions, but the given context is sufficient given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise purpose sentence followed by a tip that includes an example and related guidance. The tip is informative but could be slightly trimmed (e.g., the example contains placeholder names and addresses that could be abbreviated). Still, every sentence carries useful information, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects for an agent: what it does, the exact body structure, the role values, and the return value. It also provides a practical hint to resolve recipient SMTP via list-users. Minor gaps include no mention of side effects on existing permissions or the confirm parameter, but these are covered by schema and annotations. Overall, it's adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already documents most parameters. The description adds value with a concrete example body including emailAddress, role enum values, and other fields. It also clarifies the role options ('read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess'). This goes beyond the schema's generic enum by showing a realistic payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('create a calendarPermission resource'), the resource type, and the purpose (specify identity and role for sharing/delegating a calendar). The tip further clarifies it's the user's primary calendar, which distinguishes it from other calendar-related creation tools like 'create-calendar'. The verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'Shares the user's primary calendar with another user (or sets up a delegate)'. It also gives a prerequisite ('Use list-users to resolve the recipient SMTP') and ties the returned id to update/delete operations, implying when to use this vs alternatives. However, it doesn't explicitly state when not to use it or mention alternatives like creating permissions for other calendars, which would make it fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-onedrive-foldercreate-onedrive-folderADestructive
Create a OneDrive folder.
💡 TIP: Creates a new folder inside the specified drive item. Body must include name (string) and folder ({}) fields. Use @microsoft.graph.conflictBehavior to control behavior on name conflict: 'rename' (default), 'replace', or 'fail'.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, signaling a write operation. The description adds value by disclosing the conflictBehavior options ('rename', 'replace', 'fail'), which reveals how name conflicts are handled—including the possibility of replacing an existing item. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a tip, with no filler. The core action is front-loaded, and the tip delivers the most important parameter constraints and conflict behavior immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with a large nested body schema and no output schema, the description covers the required body fields and conflict handling. It omits return value expectations and permission requirements, but annotations and schema provide sufficient baseline context for a competent agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is high (83%), the description adds critical parameter semantics by specifying that the body must include name (string) and folder ({}) fields. It also introduces @microsoft.graph.conflictBehavior, which is not present in the schema, making this guidance essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a OneDrive folder') and clarifies the target ('inside the specified drive item'). This distinguishes it from sibling operations like upload-file-content or delete-onedrive-file, which target files rather than folders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when creating a folder in a drive), but it does not explicitly name alternatives, provide when-not-to-use guidance, or contrast with siblings like move-rename-onedrive-item. The context is clear but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-onenote-notebookcreate-onenote-notebookBDestructive
Create a new OneNote notebook.
💡 TIP: Creates a new OneNote notebook. Body: { displayName: 'Notebook Name' }. The name must be unique across the user's notebooks.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=true) and the description's "create" claim is consistent with them — no contradiction. The description adds the uniqueness constraint and required body shape as useful behavioral context, but contributes little beyond the annotations beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the whole text is short, but the TIP line redundantly restates "Creates a new OneNote notebook" before delivering the body and uniqueness details. The redundancy costs it a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a large nested schema and no output schema, the description is sufficient to invoke the tool correctly (creates a notebook with a displayName), but it omits response expectations, error behavior on name collision, and the confirm-gate semantics that appear in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents most parameters including body.displayName. The description adds a helpful shorthand (Body: { displayName: 'Notebook Name' }) that clarifies the single required field, but doesn't go beyond what the schema provides for the rest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create a new OneNote notebook" names a specific verb and resource, making it distinguishable from siblings like create-onenote-page and create-onenote-section. However, the TIP line repeats the same purpose verbatim rather than refining the scope, so it earns points for clarity but not full distinctiveness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a practical usage note — the name must be unique across the user's notebooks — which helps the agent avoid a failed call. But it never routes to alternatives (e.g., create-onenote-section for working inside a notebook) nor states when not to use the tool, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-onenote-pagecreate-onenote-pageADestructive
Create a new OneNote page in the default section of the default notebook. To create a page in a different section in the default notebook, you can use the sectionName query parameter. Example: ../onenote/pages?sectionName=My%20section The POST /onenote/pages operation is used only to create pages in the current user's default notebook. If you're targeting other notebooks, you can create pages in a specified section.
💡 TIP: Body must be a full HTML document (with ......). Partial HTML or plain text fails silently or creates malformed pages.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal this is a write operation (readOnlyHint=false) and potentially destructive (destructiveHint=true). The description adds valuable behavioral detail by warning that the body must be a full HTML document and that partial HTML or plain text 'fails silently or creates malformed pages.' This goes beyond the annotations and is critical for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat wordy and repeats 'default notebook' multiple times, making it less concise than it could be. It does have a logical structure: main purpose, section targeting, notebook limitations, then a tip. But some sentences could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should explain what the response contains (e.g., page details, URLs). It does not. It also omits mention of the confirm parameter, which might be required given the destructiveHint annotation. For a complex operation with nested objects and a write/possible-destructive flag, the description is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so most parameters are already described. The description adds meaningful context by detailing the sectionName query parameter (which is not present in the schema) and emphasizing that the body must be a full HTML document. However, the sectionName parameter isn't exposed in the schema, which could confuse agents about how to set it. The HTML tip is genuinely useful beyond the schema's 'content' field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new OneNote page') and the resource ('in the default section of the default notebook'). It also mentions the sectionName parameter and the limitation to the default notebook, which helps distinguish it from related tools. However, it does not explicitly contrast with the sibling 'create-onenote-section-page', leaving some ambiguity for an agent to choose between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: only for the current user's default notebook, and how to target different sections via the sectionName parameter. It also hints that other notebooks require a different approach ('you can create pages in a specified section'). However, it does not name the alternative tool or enumerate when-not-to-use scenarios, so it's not fully comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-onenote-sectioncreate-onenote-sectionADestructive
Create a new onenoteSection in the specified notebook.
💡 TIP: Creates a new section in a notebook. Body: { displayName: 'Section Name' }.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| notebookId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true and readOnlyHint: false, so the description's 'Create' is consistent. It adds no extra behavioral context beyond the annotation—no mention of side effects, confirmation requirements, or error conditions. The body example is more about parameters than behavior, so the description adds minimal value beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but redundant: the first sentence already states the purpose, and the tip repeats it ('Creates a new section in a notebook'). The body example is useful, but the tip adds no new information. The structure is acceptable but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with a standard destructive annotation and 80% schema coverage, the description covers the essential intent and parameters. It omits details like return value or confirmation behavior, but these are captured in the schema and annotations, so the description is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so baseline is 3. The description adds a concrete example for the required body parameter (displayName) and implies the notebookId is required via 'specified notebook'. This helps the agent construct valid calls, going slightly beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), a specific resource ('onenoteSection'), and the scope ('in the specified notebook'). It clearly distinguishes from sibling tools like create-onenote-section-page and create-onenote-notebook. The added body example reinforces the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs. alternatives. It does not mention any conditions, exclusions, or relationship to sibling tools. With over 200 sibling tools, this is a significant omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-onenote-section-pagecreate-onenote-section-pageBDestructive
Create a new page in the specified section.
💡 TIP: Body must be a full HTML document (with ......). Partial HTML fails silently.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| onenoteSectionId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation aspect is known. The description adds a valuable behavioral detail: partial HTML fails silently, which is beyond what annotations provide. However, no other behavioral context (e.g., idempotency, rate limits) is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the primary purpose front-loaded and the critical tip as a secondary note. Efficient and well-structured, though the tip emoji is slightly informal but does not harm clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the most important caveat (full HTML requirement) and the purpose. Given the schema provides required parameters and confirm gate details, the description is minimally sufficient, but it does not explain the relationship between the body object schema and the HTML requirement, leaving ambiguity for a tool with nested object complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes the body parameter as an object with page properties, but the description's tip insists body must be a full HTML document—a critical but potentially contradictory clarification. This adds value beyond the schema's 80% coverage, yet the mismatch between schema type and description content may confuse agents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new page in the specified section', identifying the verb, resource, and location. It distinguishes from sibling create-onenote-page by the section qualifier, though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus sibling tools like create-onenote-page. The only usage hint is the HTML format tip, which addresses parameter formatting rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-outlook-categorycreate-outlook-categoryADestructive
Create an outlookCategory object in the user's master list of categories.
💡 TIP: Creates a new Outlook category. Body: { displayName (unique), color (one of: none, preset0 … preset24 — maps to red, orange, yellow, green, teal, olive, blue, purple, cranberry, steel, dark-steel, gray, dark-gray, black, dark-red, dark-orange, dark-yellow, dark-green, dark-teal, dark-olive, dark-blue, dark-purple, dark-cranberry) }. Category names are case-sensitive when applied to messages/events.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the description does not carry the full safety burden. It adds behavioral context such as uniqueness and case sensitivity, which are beyond annotations. However, it does not explain side effects, permission requirements, or the result of creation, leaving gaps that annotations only partially cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise and front-loads the main action. The tip section repeats the action but also provides essential parameter details (color mapping, uniqueness) that are not redundant. There is minor redundancy between the first sentence and the tip, but overall it is efficient and well-structured with a clear format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested body schema, no output schema, and annotations already indicate it is a write operation. The description explains required parameters and constraints, but does not mention authentication prerequisites, potential confirmation requirements (though the schema documents the confirm parameter), or what the response contains. It is adequate but not exhaustive for an agent that might need to handle responses or understand side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the input schema by mapping color preset values to human-readable names and emphasizing displayName uniqueness and case sensitivity. With schema coverage at 75%, the description compensates for the undocumented 'color' parameter and enriches understanding of 'body' fields, which is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (create) with a clear resource (outlookCategory object) and scope (user's master list of categories). It is not a tautology and clearly distinguishes from sibling tools like list-outlook-categories by its verb. The addition of uniqueness and case-sensitivity constraints further clarifies the object's semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it creates a category, but it does not explicitly mention when to use this tool versus alternatives, nor does it provide exclusions or preconditions. The note about case sensitivity is a usage detail, but there is no guidance on when to prefer this over other category-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-outlook-contactcreate-outlook-contactBDestructive
Add a contact to the root Contacts folder or to the contacts endpoint of another contact folder.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the bar is lowered. The description adds no extra behavioral context, such as whether creation overwrites existing contacts or requires specific permissions, but it doesn't contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It's appropriately concise for stating the core action, though it sacrifices useful usage detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fails to explain how the tool targets a folder beyond root—there's no folder ID parameter in the schema—and doesn't clarify the distinction from create-contact-in-folder. This ambiguity means an agent may not know how to set the intended folder.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the schema itself provides detailed field descriptions (e.g., displayName, emailAddresses). The tool description adds no parameter semantics, but given the coverage, this is adequate and doesn't require compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Add a contact') and resource (contact), and specifies two target locations (root Contacts folder or another contact folder). It's clear but doesn't explicitly differentiate from sibling tools like create-contact-in-folder, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus create-contact-in-folder or how to select between the root folder and another folder. There's no mention of prerequisites or the confirm gate behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-planner-bucketcreate-planner-bucketCDestructive
Create a new plannerBucket object.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false and destructiveHint=true, and the description adds no behavioral context of its own — it doesn't clarify the mutating effect, non-idempotency, or how creation interacts with the confirm gate documented in the schema. It neither contradicts the annotations nor supplements them with any disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words, satisfying conciseness and front-loading. However, the brevity simply omits content rather than compressing useful information, making it under-specified rather than efficiently comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, complex create operation with a deeply nested body (tasks, assignments, checklist, dueDateTime) and no output schema, yet the description is one sentence. It omits the relationship to a plan, the confirmation requirement, and any guidance on constructing the body, leaving an agent under-equipped for a mutation with real side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the schema itself documents parameters well (name, planId, orderHint). But the description contributes zero parameter information and doesn't even note that planId is needed to place the bucket in a plan. What little the description adds is a restatement of the body object present in the schema, providing no value beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (create) and resource (plannerBucket object), so the verb+resource is present and clear. However, it is essentially a restatement of the tool name and does nothing to distinguish create-planner-bucket from close siblings like create-planner-task, update-planner-bucket, or list-plan-buckets. It is clear but barely more informative than the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no mention of when not to use it, and no prerequisites stated. The schema reveals that planId is required to associate the bucket with a plan, but the description never communicates this needed context, so an agent gets no help choosing or preparing a valid call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-planner-taskcreate-planner-taskCDestructive
Create a new plannerTask.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=true, which already signal this is a mutating/write operation. The description 'Create a new plannerTask' is consistent with these annotations and adds no contradiction, but it also contributes nothing beyond the annotations—no mention of side effects, required context like plan/bucket existence, confirmation behavior, or return values. Given that annotations carry the safety profile, the bare minimum is met, but the description adds no behavioral depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence and is appropriately front-loaded. However, it is under-specified rather than economically concise—it conveys the bare minimum and could benefit from a qualifying phrase about what the tool actually does with the body payload. It scores a 3 for being adequately short but not adding useful structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex creation tool with a deeply nested body schema, yet the description gives no indication of what fields are necessary to create a valid task (e.g., that body is required, whether planId or bucketId is needed). With no output schema and no description-level guidance, an agent would have to infer all requirements from the JSON schema alone. For a write operation of this complexity, the description should do far more to orient the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, placing it near the high-coverage baseline of 3. The schema itself is extremely rich—the body parameter contains detailed descriptions for priority (with the 0-10 interpretation), dueDateTime (ISO 8601 format), percentComplete, and various read-only flags. The description adds nothing about parameters beyond what the schema already documents, which is acceptable at this coverage level but not exemplary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource combination: 'Create a new plannerTask.' This does identify the action (creating a planner task) and differentiates it from siblings like list-planner-tasks or delete-planner-bucket. However, it's minimal—'plannerTask' is a slightly awkward compound term and the description adds nothing beyond the name itself, offering no detail about what a planner task is or what fields are involved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Siblings include create-todo-task, create-planner-bucket, create-planner-task-message, and update-planner-task, but the description gives no context on how to choose among them. A tool as generic as 'Create a new plannerTask' would benefit from at least a note on prerequisites (e.g., a plan or bucket must exist first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-planner-task-messagecreate-planner-task-messageADestructive
[beta] Create a new plannerTaskChatMessage on a plannerTask.
💡 TIP: Posts a message to a Planner task's chat (the modern 'task chat', not the legacy conversationThreadId comment). Microsoft is retiring the classic task comments experience and hiding it from the task (Planner 2026 update), so task chat is the current supported way to post per-task updates teammates will see, with @mentions. Body: { content: 'plain text or sanitized HTML', mentions?: [{ mentioned: 'user-id', position: 0, mentionType: 'user' }] } (mentions optional). No ETag/If-Match required. BETA Graph API: subject to change; delegated work/school accounts only — no application permissions, no personal Microsoft accounts, global cloud only (not GCC/DoD/21Vianet).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint false and destructiveHint true, so the burden on the description is reduced. The description explains the effect (posts a message teammates will see) and adds deployment constraints (beta, delegated accounts, global cloud). However, it does not mention that this is considered destructive or that confirmation might be required (the confirm parameter is only in the schema). It adds some context but not fully beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, modernization context, body structure example, and critical constraints (beta, environment, no ETag). It is front-loaded with the core action and uses a tip for guidance. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description covers the input structure, provides an example, and lists constraints. It doesn't explain the return value, but for a create operation that is often standard. It omits mention of the confirm parameter, but the schema describes it. Overall, the description is sufficient for an agent to call it correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (80%), but the description adds a concrete body example: { content: 'plain text or sanitized HTML', mentions?: [...] } and clarifies that mentions are optional. It also warns that plannerTaskId must be passed under that name, not as 'id'. This goes beyond the schema descriptions and provides practical usage guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a new plannerTaskChatMessage on a plannerTask' – a specific verb and resource. It further distinguishes this from the legacy conversationThreadId comment, clarifying exactly what object is being created. The name itself is unambiguous, and the description reinforces the purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip clearly states this is the modern 'task chat' versus the legacy comment thread, and notes that Microsoft is retiring classic comments, so this is the supported path. It also indicates the body structure and mentions. It doesn't explicitly name alternative tools like list-planner-task-messages or delete-planner-task-message, but the context implies when to use it (for posting) vs. those. The beta and environment constraints are also noted, which help an agent decide suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-reply-all-draftcreate-reply-all-draftADestructive
Create a draft to reply to the sender and all recipients of a message in either JSON or MIME format. When using JSON format:
Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.
If the original message specifies a recipient in the replyTo property, per Internet Message Format (RFC 2822), you should send the reply to the recipients in the replyTo and toRecipients properties, and not the recipients in the from and toRecipients properties.
You can update the draft later to add reply content to the body or change other message properties. When using MIME format:
Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.
Add any attachments and S/MIME properties to the MIME content. Send the draft message in a subsequent operation. Alternatively, reply-all to a message in a single action.
💡 TIP: For HTML replies pass Message.body.contentType: 'html' with Message.body.content as HTML. Note: supplying Message.body replaces the whole draft body, so the original quoted history is not included. Specifying both 'comment' and Message.body returns 400. Signatures are added by the Outlook client only, not via Graph.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond the annotations: specifying both comment and body returns a 400 error, supplying Message.body replaces the whole draft body (excluding quoted history), and signatures are added by Outlook client not via Graph. It also explains the MIME encoding requirement. These details complement the annotations (destructiveHint: true) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but well-organized: a clear opening statement, bullet points for JSON and MIME formats, and a tip at the end. It front-loads the core purpose and uses structure to separate concerns. Some redundancy exists (e.g., repeating the 400 error), but overall it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested object schema and the absence of an output schema, the description covers the essential information an agent needs: format options, key constraints, recipient behavior, and the body replacement caveat. It does not detail MIME header specifics, but that is likely peripheral for draft creation. The description is sufficient for correct invocation in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (80%), but the description enhances understanding: it clarifies the relationship between Comment and Message.body, the constraint on specifying both, and the use of replyTo vs from recipients. It also explains the messageId parameter's expected format. This goes beyond the schema's bare property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: 'Create a draft to reply to the sender and all recipients of a message.' It distinguishes this from related tools like create-reply-draft (which replies only to sender) and create-forward-draft, and mentions two formats (JSON/MIME). The verb and resource are explicit, and the scope (reply-all) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides substantial guidance: when to use JSON vs MIME, the constraint not to specify both comment and body, and the rule about using replyTo recipients per RFC 2822. It also mentions the alternative of doing a single-action reply-all. However, it does not explicitly name sibling tools like create-reply-draft for comparison, so the when-to-use distinction is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-reply-draftcreate-reply-draftADestructive
Create a draft to reply to the sender of a message in either JSON or MIME format. When using JSON format:
Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.
If replyTo is specified in the original message, per Internet Message Format (RFC 2822), you should send the reply to the recipients in replyTo, and not the recipients in from.
You can update the draft later to add reply content to the body or change other message properties. When using MIME format:
Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.
Add any attachments and S/MIME properties to the MIME content. Send the draft message in a subsequent operation. Alternatively, reply to a message in a single operation.
💡 TIP: For HTML replies pass Message.body.contentType: 'html' with Message.body.content as HTML. Note: supplying Message.body replaces the whole draft body, so the original quoted history is not included. Specifying both 'comment' and Message.body returns 400. Signatures are added by the Outlook client only, not via Graph.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint: false, destructiveHint: true) by detailing key behaviors: the 400 error when both comment and body are supplied, the note that supplying body replaces the entire draft body so quoted history is lost, the MIME base64 requirement, and that signatures are only added by the Outlook client, not via Graph. These are valuable, non-obvious details that help an agent predict behavior accurately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured with bullet points and clear formatting. It leads with the primary purpose, then details each format, and provides a tip and note. Despite its length, every sentence conveys necessary information; it is appropriately detailed for a complex tool with two distinct input formats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two complex input formats, nested schemas, and error-prone conditions, the description is extremely complete. It covers format selection, header requirements, attachments, error cases, update workflow, and the alternative single-operation reply. No output schema is needed, and the description leaves no obvious gaps for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is high (80%), the description adds meaningful semantics for the body parameter (explaining the Comment vs Message distinction and the error condition) and for messageId (instructing to pass it as 'messageId' not 'id'). It also clarifies that attachments and S/MIME properties go into the MIME content. This adds value beyond the schema's basic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a draft to reply to the sender of a message in either JSON or MIME format.' It specifies the verb, resource, and formats, and distinguishes itself from siblings like create-forward-draft and create-reply-all-draft by its focus on replying to the sender only. The mention of 'Alternatively, reply to a message in a single operation' further clarifies its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you want to create a draft rather than send immediately ('Send the draft message in a subsequent operation'), and it mentions the alternative of replying in a single operation. However, it does not explicitly name any sibling tools (e.g., create-reply-all-draft, reply-mail-message) or provide clear exclusions, so the guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-specific-calendar-eventcreate-specific-calendar-eventADestructive
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.
💡 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=true, so the mutation/side-effect profile is covered structurally. The description adds one genuine behavioral nuance (Graph resolves DST against the supplied zone), but does not disclose that attendees cause invitations/notifications to be sent, and the confirm gate behavior is only documented in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then layers time-zone guidance and a recipient-lookup tip. Mostly efficient and free of padding, though the trailing TIP block is slightly disjointed from the time-zone paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex nested schema, no output schema, and mutation semantics, the description covers the main gotchas an agent needs (nested time objects, time-zone selection, attendee email resolution). It is nearly complete, missing only a note that invites are dispatched to attendees.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 80%, yet the description adds value beyond it: it explains calendarId is the target calendar's ID, warns against the flat startDateTime/startTimeZone form in favor of nested {dateTime, timeZone} objects, and advises how to pick the time zone. This meaningfully clarifies the trickiest nested parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a calendar event') and scopes it ('on a specific calendar'), and clarifies the required calendarId. This implicitly separates it from the sibling create-calendar-event, but it never names an alternative tool outright, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers real conditional guidance for time-zone choice (UTC for one-off events vs organizer's zone for recurring ones) and directs the agent to get-mailbox-settings/list-supported-time-zones and list-users for lookups. However, it gives no guidance on when to choose this tool over the closely related create-calendar-event variant, so usage is only implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-subscriptioncreate-subscriptionADestructive
Subscribes a listener application to receive change notifications when the requested type of changes occur to the specified resource in Microsoft Graph. To identify the resources for which you can create subscriptions and the limitations on subscriptions, see Set up notifications for changes in resource data: Supported resources. Some resources support rich notifications, that is, notifications that include resource data. For more information about these resources, see Set up change notifications that include resource data: Supported resources.
💡 TIP: Creates a webhook subscription for change notifications. Required body: { changeType (comma-separated: 'created,updated,deleted'), notificationUrl (HTTPS, must validate with token echo), resource (e.g. '/me/mailFolders/inbox/messages', '/users/{id}/events', '/teams/{id}/channels/{id}/messages'), expirationDateTime (ISO 8601, max varies by resource type — 1 hour for calls, 24h for messages, 3 days for mail), clientState (opaque string returned in notifications, for validation) }. Optional: includeResourceData (true enables rich notifications, requires encryptionCertificate + encryptionCertificateId). No dedicated scope — caller must have a read permission for the target resource (e.g. Mail.Read, Calendars.Read, ChannelMessage.Read.All, Files.Read.All).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide hints (readOnlyHint=false, destructiveHint=true, openWorldHint=true), so the description carries the disclosure burden. It adds valuable behavioral context: the notificationUrl must validate with token echo, expiration maximums vary by resource (1 hour for calls, 24h for messages, 3 days for mail), and enabling includeResourceData requires encryptionCertificate + encryptionCertificateId. The creation side-effect aligns with destructiveHint=true, so there is no contradiction. The description enriches rather than repeats the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first paragraph is verbose boilerplate copied from Microsoft docs, including hyperlinks an agent cannot follow ('see Set up notifications...'). The TIP block is dense but efficient, front-loading required fields before optional ones. There is redundancy — the body requirements are repeated in prose and again structured in the schema. It earns its structural clarity but could trim the doc-link prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex operation (nested body object, 4 top-level parameters, no output schema), the description is fairly complete: it covers required body fields, optional rich-notification setup, and the permission precondition. Gaps are minor — it relies on non-clickable external references for details like lifecycleNotificationUrl behavior (Teams) and exact maximum lifetime tables, deferring that to the schema. Overall sufficient for an agent to form a valid request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, borderline high, so the schema already documents most fields well. But the description adds genuine value beyond the schema: permission requirements tied to specific scopes, concrete resource path examples, and concrete expiration maximums that the schema only vaguely references as 'Subscription lifetime.' This helps the agent construct a valid body without external lookups.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement: 'Subscribes a listener application to receive change notifications when the requested type of changes occur to the specified resource in Microsoft Graph.' This distinguishes it from the sibling set (update-subscription, delete-subscription, list-subscriptions, get-subscription) — this is the create operation. Nothing tautological; it clearly establishes the tool's function as registering a webhook for change notifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP block gives strong when-to-use guidance: required body fields, concrete resource path examples ('/me/mailFolders/inbox/messages', '/users/{id}/events'), and a permission model ('No dedicated scope — caller must have a read permission for the target resource, e.g. Mail.Read, Calendars.Read'). It explains the validation requirement for notificationUrl. However, it never explicitly contrasts with the sibling subscription tools or states when NOT to use it — usage is implied rather than explicitly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-todo-linked-resourcecreate-todo-linked-resourceADestructive
Create a linkedResource object to associate a specified task with an item in a partner application. For example, you can associate a task with an email item in Outlook that spurred the task, and you can create a linkedResource object to track its association. You can also create a linkedResource object while creating a task.
💡 TIP: Links a resource to a To Do task. Body: { webUrl: 'https://...', applicationName: 'Mail', displayName: 'Related email', externalId: 'optional-id' }. Use to link tasks to emails, files, or web pages for context.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| todoTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=false and destructiveHint=true, aligning with the description's 'Create' action, so there is no contradiction. However, the description doesn't disclose additional behavioral aspects beyond what the annotations already convey. It does add an example of the body structure, but that pertains to parameters rather than behavior. Since the annotation already indicates a destructive write, the description doesn't add significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose and has redundancy. The main description and the tip share similar information (both explain linking a resource and provide body examples). It could be tightened without losing meaning. The core purpose is clear, but the extra example and tip repeat content, reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with a required body and path parameters, the description provides enough context: it explains what the tool does, gives an example body, and clarifies the association scenario. The required parameters are documented in the schema, and the description doesn't overlook any critical usage detail. The lack of an output schema is typical for create operations, so no additional return-value explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, meaning most parameters are described in the schema. The description adds a concrete example of the body object with fields like webUrl, applicationName, displayName, and externalId, giving a template that helps an agent construct the body. This enriches the schema descriptions and helps clarify expected values, especially for the nested body parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'Create a linkedResource object to associate a specified task with an item in a partner application.' It uses a specific verb (create), a specific resource (linkedResource), and clarifies the association intent. This clearly distinguishes it from siblings like list-todo-linked-resources and delete-todo-linked-resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides contextual use cases, e.g., 'you can associate a task with an email item in Outlook that spurred the task,' and notes you can create a linkedResource during task creation. It also gives guidance on when to use it ('Use to link tasks to emails, files, or web pages for context'). It doesn't explicitly state when not to use it, but the siblings are obvious alternatives that are not relevant here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-todo-taskcreate-todo-taskADestructive
Create a new task object in a specified todoTaskList.
💡 TIP: Creates a new task in a Microsoft To Do list. Body: { title: "..." }; optional dueDateTime, reminderDateTime, importance, body (notes), recurrence, categories. Requires todoTaskListId from list-todo-task-lists.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, covering the core safety profile. The description adds no contradictory statements and provides some useful context (e.g., the source of todoTaskListId and optional fields). However, it does not disclose any additional behavioral traits like confirmation requirements (though the confirm parameter is in the schema) or side effects beyond creation. Since the description does not contradict annotations and adds a small amount of context, a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the primary purpose stated first and the tip as a compact, useful addition. The '💡 TIP' is informal but efficient, and there is no unnecessary verbosity. It is appropriately front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex nested body and a required list ID, the description provides a minimal body example, lists optional fields, and directs the agent to the sibling tool for the ID. It does not mention the confirm parameter or output structure, but annotations and schema cover those aspects. Given the richness of the schema, the description is sufficient for correct invocation, though it could briefly note the confirmation gate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, which is high, so the baseline is 3. The description echoes some schema details (e.g., 'Body: { title: ... }' and optional fields) but does not add meaning beyond what the schema already provides. The only slight addition is highlighting the most relevant optional fields for a quick start, but it is largely redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new task object') and the resource ('task object in a specified todoTaskList'). It also frames it as a Microsoft To Do operation, distinguishing it from sibling tools like list-todo-tasks or create-todo-task-list. The verb+resource combination is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite: 'Requires todoTaskListId from list-todo-task-lists', which tells the agent where to obtain the required ID. It also furnishes a body example and lists optional fields, giving practical usage context. It does not explicitly state when to avoid this tool (e.g., for updates/deletes), but the create nature is self-evident from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-todo-task-listcreate-todo-task-listADestructive
Create a new lists object.
💡 TIP: Creates a new Microsoft To Do task list (the named buckets shown in the To Do app sidebar). Body: { displayName: 'My new list' }. Returns the created todoTaskList with its id, displayName, isOwner, isShared, and wellknownListName ('none' for user-created lists). The built-in lists ('Tasks', 'Flagged emails') already exist and cannot be re-created. Pair with create-todo-task to populate it.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the response structure (returns id, displayName, isOwner, isShared, wellknownListName) and the built-in list limitation. It does not mention the confirm gate or error behavior, but the schema covers the confirm parameter. It adds value beyond the annotations (readOnlyHint=false, destructiveHint=true) without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficiently packed. It front-loads the purpose, then provides a clarifying tip with an example and notes limitations. Every sentence adds value, with no unnecessary filler. The structure is clear and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema, the description adequately covers purpose, minimal input example, response fields, a key limitation, and a usage pairing. It gives an agent enough to call the tool correctly without needing to inspect the full schema. The only omission is a mention of the confirm gate, but that is documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives a concrete example body { displayName: 'My new list' }, clarifying that only displayName is typically needed, and explains what the returned object includes. This adds significant meaning beyond the schema's property descriptions, which are generic. It helps an agent understand what input is essential and what output to expect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Creates a new Microsoft To Do task list' and explains what a task list is (named buckets in the sidebar). It distinguishes from siblings like create-todo-task by clarifying it creates the list itself, not tasks within it. The description also specifies the resource and the action precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: it tells the agent to pair with create-todo-task to populate the list, and it notes that built-in lists ('Tasks', 'Flagged emails') already exist and cannot be re-created, which is a key prerequisite. This effectively directs the agent to when to use this tool and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-upload-sessioncreate-upload-sessionADestructive
Create an upload session.
💡 TIP: For large file uploads (no size limit, and no minimum unlike the Outlook attachment session). Returns a pre-authenticated uploadUrl; the caller PUTs the bytes there itself. This server does not perform the PUT. For new files use path: /items/{parentId}:/{fileName}:/createUploadSession. Body (optional): { item: { '@microsoft.graph.conflictBehavior': 'rename' } }.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, potentially destructive operation. The description adds crucial behavioral context: it returns a pre-authenticated uploadUrl and the server does not perform the PUT, meaning the caller is responsible for the actual upload. This goes beyond the annotations and is essential for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. The tip and path example are brief and directly useful, with no wasted words. Although it could be trimmed, every sentence adds necessary operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a two-step upload process and no output schema, the description adequately explains the return value (uploadUrl) and the caller's responsibility to PUT. It also covers the path for new files and optional body. It could mention potential errors or required headers for the PUT, but the core usage is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 83% schema description coverage, most parameters are already documented in the schema. The description adds value by showing an example body with conflictBehavior and explicitly stating the body is optional. This aids in constructing correct parameters without repeating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb and resource: 'Create an upload session.' It also differentiates from the Outlook attachment session by noting it is for large files with no size limit and no minimum, making it distinct from the sibling tool. The path example further specifies usage for new files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with the Outlook attachment session ('unlike the Outlook attachment session'), providing a scoping condition. It also gives a concrete path for new files and notes the caller must PUT bytes, which is critical usage guidance. However, it does not explicitly state when not to use this tool beyond implying the alternative for smaller files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decline-calendar-eventdecline-calendar-eventADestructive
Decline invitation to the specified event in a user calendar. If the event allows proposals for new times, on declining the event, an invitee can choose to suggest an alternative time by including the proposedNewTime parameter. For more information on how to propose a time, and how to receive and accept a new time proposal, see Propose new meeting times.
💡 TIP: Declines a meeting invitation. Optional body: { sendResponse: true, comment: 'Cannot attend, conflict.' }. The event remains in the calendar as declined unless the user deletes it.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true and readOnlyHint: false, so the description's job is to add context. It does by stating that 'The event remains in the calendar as declined unless the user deletes it,' which clarifies the persistence behavior. It also mentions the tip with an example body, conveying sendResponse and comment semantics, though it stops short of describing all recovery options or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs, with the core action front-loaded and a separate tip that offers a concrete example. It avoids unnecessary fluff but does repeat 'Declines a meeting invitation' in the tip, which is minor redundancy. The structure is clear and scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, nested objects) and no output schema, the description covers the essential usage: what it does, how to propose a new time, and the persistence behavior. It lacks an explicit statement about the response format, but that is not critical because the schema does not define one. It also points to further documentation for proposals. Overall, enough context for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so most parameters have descriptions. The description adds value by explicitly mentioning the proposedNewTime parameter and providing a concrete example body ('sendResponse: true, comment: ...'), which clarifies how to use the body object. It also reinforces the eventId usage, but the schema already explains that. Overall it augments the schema without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Decline invitation to the specified event in a user calendar.' It uses a specific verb and resource, making the purpose unambiguous. It also distinguishes itself from sibling operations like accept or cancel by focusing on declining, and the proposedNewTime option adds nuance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when the user wants to decline a meeting invitation, and it explains the optional proposedNewTime scenario. However, it does not explicitly contrast it with alternatives such as accept-calendar-event, tentatively-accept, or cancel, leaving the choice to inference. There is no clear 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-calendardelete-calendarADestructive
Delete a calendar other than the default calendar.
💡 TIP: Deletes a calendar and all its events. The default calendar cannot be deleted. This action cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description adds critical behavioral details: it deletes all events in the calendar, the default calendar is protected, and the action is irreversible. This gives the agent a complete picture of side effects and consequences, going beyond what structured metadata provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: a single sentence stating the action and constraint, followed by a brief tip with two key consequences. No filler, and the most important information is front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool, the description covers the essential: what it does, the cascade effect, the default calendar restriction, and irreversibility. It does not explicitly mention the confirmation gate or response behavior, but those are already covered in the schema and annotations. Given the moderate complexity and high annotation coverage, this is quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents all parameters (calendarId, confirm, If-Match, etc.) with descriptions, so the baseline is 3. The description does not add parameter-specific semantics beyond hinting that calendarId must refer to a non-default calendar. Since schema coverage is 100%, the description does not need to compensate, and it adds minimal extra value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the resource (calendar), and a key constraint (other than the default calendar). It also mentions that it deletes all events, which adds specificity and distinguishes it from other calendar-related tools like update-calendar or delete-calendar-event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the default calendar cannot be deleted, which tells the agent when NOT to use it. It does not name alternative tools, but this is the only tool for deleting a calendar, so that distinction is sufficient. The guidance is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-calendar-eventdelete-calendar-eventADestructive
Removes the specified event from the containing calendar. If the event is a meeting, deleting the event on the organizer's calendar sends a cancellation message to the meeting attendees.
💡 TIP: Deleting a seriesMaster deletes ALL occurrences of the recurring event. To cancel a single occurrence, delete that specific instance ID from list-calendar-event-instances.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral side effects: deleting an organizer's event sends a cancellation message to attendees. It also explains the cascading behavior for seriesMaster. Annotations already mark destructiveHint true, so the destructive nature is known, but the description adds specific consequences that an agent needs to anticipate. It does not mention the confirm gate, but the schema documents that parameter, so this is adequately covered elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the core action is stated first, followed by a relevant behavioral note, and a tip for recurring events. No redundant sentences. The tip is valuable and earns its place. Slightly longer than the minimum, but each sentence adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (reacting to series/instance behavior and meeting cancellation), the description covers the critical behavioral nuances. The schema handles parameter semantics, and output schema is absent so no return info is expected. The description could have mentioned the confirm gate, but that is documented in the schema, so completeness is acceptable. It is adequate for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented in the input schema. The description adds no parameter-specific information beyond what the schema provides; it only touches on eventId interpretation implicitly via the recurring-event tip. Since the schema carries the full parameter documentation, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Removes') and resource ('specified event from the containing calendar'), and it implicitly distinguishes from sibling cancel-calendar-event by noting that deleting the organizer's event sends a cancellation message. However, it does not explicitly name or contrast with cancel-calendar-event or delete-specific-calendar-event, leaving some differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage guideline for recurring events: it explains that deleting a seriesMaster deletes all occurrences and directs to delete a specific instance ID from list-calendar-event-instances for a single occurrence. This gives a when-to-use alternative. It stops short of explicitly recommending this tool over cancel-calendar-event for any scenario, but the recurring-event guidance is practical and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-contact-folderdelete-contact-folderADestructive
Delete contactFolder other than the default contactFolder.
💡 TIP: Deletes a contact folder. The default 'Contacts' folder cannot be deleted — Graph returns an error. The folder (and its contents) typically lands in Deleted Items rather than being permanently removed. Get the folder id via list-contact-folders.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| contactFolderId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, so the description carries additional behavioral disclosure. It explains that the folder 'typically lands in Deleted Items rather than being permanently removed,' and that the default folder triggers a Graph error. This goes beyond the annotation by detailing the consequence and exception, which is valuable for an agent deciding to call this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and a tip, all tightly packed with relevant information. It front-loads the core purpose and then adds the key caveat and workflow hint. No filler words—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation, the description covers the main behavioral aspects (default folder exception, Deleted Items behavior) and the prerequisite (get folder id). It doesn't mention response format, but for a delete operation that's less critical, and the schema already includes parameters for controlling the response (excludeResponse, includeHeaders). Given no output schema exists, the description is sufficiently complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have thorough descriptions. The tool description adds no new parameter-specific semantics beyond mentioning how to get the contactFolderId via list-contact-folders, which reinforces usage but doesn't expand on the schema. Baseline 3 is appropriate since the schema already documents parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('contactFolder'), and explicitly distinguishes it from the default folder: 'Delete contactFolder other than the default contactFolder.' It also clarifies what the tool does with 'Deletes a contact folder.' This clearly differentiates from siblings like delete-mail-folder or delete-calendar, and the tip reinforces the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it mentions the default folder cannot be deleted and that you should 'Get the folder id via list-contact-folders,' implying a prerequisite workflow. It doesn't explicitly name alternatives but gives enough guidance to avoid misuse. It also warns about the error if trying to delete the default folder, which is a useful usage note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-drive-item-permissiondelete-drive-item-permissionADestructive
Delete a drive item permission.
💡 TIP: Removes a specific permission from a file or folder. Only permissions that are not inherited can be deleted. Use list-drive-item-permissions first to find the permission ID.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| If-Match | No | ETag | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| permissionId | Yes | Value for the 'permissionId' path segment. Pass it under the name 'permissionId', not as 'id'. Use the 'id' field of the permission object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds the constraint that only non-inherited permissions can be deleted. It does not mention potential side effects (e.g., impact on sharing) or failure behavior for inherited permissions, but the annotation covers the destructive nature. The added constraint is useful context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a one-sentence purpose plus a clearly separated tip. It front-loads the main verb/resource and keeps the tip separate for readability. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with complete schema documentation and a destructiveHint annotation, the description covers the essential prerequisite (finding the permission ID) and a key constraint (non-inherited). It does not explain return values, but no output schema exists, and the schema details all parameters. The information is sufficient for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a detailed schema description (e.g., driveId, driveItemId, permissionId, confirm, includeHeaders). The tool description does not add any additional parameter information beyond what the schema already provides, so it earns the baseline 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action ('Delete a drive item permission') and clarifies it applies to a file or folder. It clearly distinguishes itself from other permission tools (like share or list) by specifying it removes an existing permission. The tip reinforces the purpose by explaining it removes a specific permission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip provides actionable guidance: use list-drive-item-permissions first to find the permission ID, and only non-inherited permissions can be deleted. This gives a clear prerequisite and a condition for use. It stops short of explicitly naming alternatives or when not to use this tool, but the guidance is sufficient for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-excel-rangedelete-excel-rangeADestructive
Delete an Excel range.
💡 TIP: Delete cells at the given range, shifting remaining content. Body: { shift: 'Up' } or { shift: 'Left' }. Use 'Up' to delete entire rows.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by explaining that deletion shifts remaining content and that the shift direction is controlled via the body. It doesn't mention side effects like irreversibility or the confirmation gate, but the destructive annotation already covers the core risk, and the shift behavior is a useful addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action, followed by a helpful tip. There's no redundant text, and the format makes the key information easy to find. Slightly informal due to the emoji, but that doesn't detract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with multiple required identifiers, the description covers the main behavior and the critical shift parameter, but it doesn't address the confirmation mechanism (though it's in the schema) or provide examples for the address format. It's adequate but not exhaustive, leaving a few gaps for an agent to fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (88%), and the description adds meaningful semantics for the body.shift parameter by explaining the allowed values ('Up'/'Left') and that 'Up' deletes entire rows. Other parameters (driveId, address, etc.) are adequately described in the schema, so the description's extra detail for shift is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool deletes an Excel range and specifies that it shifts remaining content, which distinguishes it from a plain clear operation. It doesn't explicitly name sibling tools like clear-excel-range, but the behavior is enough to infer the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip implies the tool is for deletion with shifting, and specifically mentions using 'Up' to delete entire rows. However, it does not explicitly state when to choose this over alternative range operations (e.g., clear-excel-range) or provide exclusions, leaving the usage guidance somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-excel-table-rowdelete-excel-table-rowADestructive
Delete an Excel table row.
💡 TIP: Delete a single row from a formal Excel table by zero-based row index.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Value for the 'index' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookTableId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description does not need to restate that. It adds meaningful context by specifying the zero-based row index and that it applies to a formal Excel table, which goes beyond the annotations and helps the agent understand the deletion semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with no wasted words. The purpose is stated upfront, and the tip adds a key detail in a scannable format with an emoji. Perfectly sized for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete operation, the description covers the essential action and target. It does not describe return values, but no output schema exists and delete responses are typically minimal. The parameters are well-documented in the schema, and the zero-based index detail fills a critical gap. It is complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that the 'index' parameter is zero-based, which is not obvious from the schema's generic 'Value for the index path segment.' This specific detail improves parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete an Excel table row' with a specific verb and resource. The tip adds that it targets a single row in a formal Excel table by zero-based index, distinguishing it from range operations and sibling tools like update-excel-table-row.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as update-excel-table-row or list-excel-table-rows. The tip clarifies the index semantics but does not explain when deletion is appropriate or when other tools should be chosen instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-focused-inbox-overridedelete-focused-inbox-overrideADestructive
Delete an override specified by its ID.
💡 TIP: Deletes a Focused Inbox override. Future messages from that sender revert to the Outlook ML classifier's default behavior. Use list-focused-inbox-overrides to find the ID first.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| inferenceClassificationOverrideId | Yes | Value for the 'inferenceClassificationOverrideId' path segment. Pass it under the name 'inferenceClassificationOverrideId', not as 'id'. Use the 'id' field of the inference classification override object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate that. It adds value by disclosing the behavioral consequence: 'Future messages from that sender revert to the Outlook ML classifier's default behavior.' This goes beyond the bare 'delete' and gives the agent a clear understanding of the side effect. However, it doesn't mention irreversibility (covered by destructiveHint) or any authorization requirements, which are reasonable to omit given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: a direct statement of the action and a concise tip. The primary verb is front-loaded, and the tip is actionable without extra fluff. There is zero waste; every sentence serves a purpose for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with one required parameter, the description covers the core behavior, the consequence, and how to obtain the required ID. The sibling set includes list and update versions, so the tool's role is clear. An output schema is absent, so no return format is specified, but that's not unusual for a delete operation. The description is complete enough for an agent to call it correctly given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema itself. The description does not add extra semantic meaning beyond what the schema provides (e.g., it doesn't elaborate on the confirm parameter's behavior or If-Match usage). It only points to list-focused-inbox-overrides for finding the ID, which is a usage hint rather than parameter semantics. The baseline of 3 is appropriate since the schema fully covers parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('an override'), and further clarifies it's a Focused Inbox override. The tip explicitly mentions the behavior change (reverting to default sentiment) and distinguishes it from list/create/update siblings. An agent can clearly tell what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a direct usage hint: 'Use list-focused-inbox-overrides to find the ID first.' This is a concrete prerequisite for calling the tool correctly. It doesn't explicitly state when not to use it, but the destructive nature and the alternative (update) are implied. The guidance is adequate for correct invocation, though it could be more explicit about scenarios where deletion might be inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-mail-attachmentdelete-mail-attachmentBDestructive
Delete a mail attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| attachmentId | Yes | Value for the 'attachmentId' path segment. Pass it under the name 'attachmentId', not as 'id'. Use the 'id' field of the attachment object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'Delete' adds no behavioral insight beyond the structured metadata. The description does not disclose whether the deletion is permanent, any cascading effects, or the existence of the confirm gate, which is only mentioned in the schema parameter descriptions. It fails to add context that would help the agent understand the consequences beyond what annotations already state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core purpose with no unnecessary words. It is ideally sized for a simple operation, front-loading the essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward delete operation, the description is minimal but not fully comprehensive. It omits mention of the confirm gate behavior (only in schema) and any post-deletion effects. However, given the schema covers all parameters and the annotations indicate destructiveness, the description is sufficient for the agent to call the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are already documented. The description adds no additional meaning about parameters, but the schema sufficiently explains messageId and attachmentId requirements. Since the schema carries the full burden, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'mail attachment', making the purpose unambiguous. The tool name is self-explanatory and distinct from siblings like delete-mail-message, so there is no confusion about what it removes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as list-mail-attachments or add-mail-attachment. It does not mention prerequisites like retrieving the message and attachment IDs or any context like permanent deletion. There is no distinction of when this tool is appropriate versus other delete operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-mail-folderdelete-mail-folderADestructive
Delete the specified mailFolder. The folder can be a mailSearchFolder. You can specify a mail folder by its folder ID, or by its well-known folder name, if one exists.
💡 TIP: Deletes a mail folder and all its contents. This action is irreversible. Use list-mail-folders to find the folder ID.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| mailFolderId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true, but the description adds crucial specifics: 'Deletes a mail folder and all its contents. This action is irreversible.' This goes beyond the annotation and helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two crisp sentences plus a tip. Front-loads the core action, then provides essential operational details (irreversibility, how to find ID). No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the description covers what is deleted (folder + contents), irreversibility, how to specify the folder, and a pointer to a sibling tool for discovery. The confirm gate is covered in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by mentioning that the folder can be specified by well-known name (not just ID), which the schema does not mention. This extra guidance pushes it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('mailFolder'), and clarifies it supports mailSearchFolder and how to specify via ID or well-known name. Clearly distinct from update/create/move siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a tip to use list-mail-folders to find the folder ID, which aids usage. Does not explicitly discuss when to avoid this tool (e.g., if a soft delete is needed) or name alternative deletion methods, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-mail-messagedelete-mail-messageADestructive
Delete an Outlook email message by its message ID. This is a soft delete that moves the message to Deleted Items.
💡 TIP: Soft delete — moves to Deleted Items. To permanently delete, delete again from Deleted Items.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the tool is known to be destructive. The description adds valuable context: it specifies 'soft delete' and its behavior (moves to Deleted Items), which is beyond annotations. It also explains the confirm gate parameter, revealing that without confirm: true, calls will fail under certain configurations. This is helpful behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and a tip, all relevant. It's concise and the tip repeats the first sentence, which is slightly redundant. However, it's not lengthy. The core purpose is front-loaded, and the tip is a quick reminder. No wasted words. It's efficient but could be more concise by removing the repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a destructive operation, annotations indicate destructiveHint true, and there is no output schema. The description covers the soft-delete behavior, the confirm requirement, and the identifier usage is covered in schema. The description is sufficient for an agent to understand how to delete correctly, including the potential need for confirmation. It doesn't cover return values, but that's acceptable without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described in the schema. The description itself adds no additional parameter semantics, but the schema descriptions are thorough, including specific guidance on messageId (use 'id' from Graph, not as 'id'). The description's tip doesn't add parameter info. Baseline for 100% coverage is 3, but the description's tip reinforces the soft-delete behavior which is relevant to the confirm parameter. This slightly elevates it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete'), resource ('Outlook email message'), and identifies the key identifier ('message ID'). It distinguishes itself from other delete operations in the sibling list (e.g., delete-calendar, delete-todo-task). However, it doesn't explicitly contrast it with related mail operations like move-mail-message or delete-mail-folder, but the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly notes this is a 'soft delete' and states the consequence ('moves to Deleted Items'). It also provides a behavioral tip about permanent deletion. It doesn't explicitly state when to use this vs alternatives, but given the sibling list, the purpose is unambiguous enough. It doesn't mention exclusions or alternatives, but the context of deleting a specific message is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-mail-ruledelete-mail-ruleADestructive
Delete the specified messageRule object.
💡 TIP: Deletes a message rule permanently. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| mailFolderId | Yes | 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. | |
| messageRuleId | Yes | Value for the 'messageRuleId' path segment. Pass it under the name 'messageRuleId', not as 'id'. Use the 'id' field of the message rule object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description's 'permanently' adds extra behavioral context beyond what annotations provide. No contradictions with the readOnlyHint=false annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The action is front-loaded, and the tip is concise and directly relevant. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete operation with no output schema, the description covers the essential action and a usage hint. It doesn't describe response format, but that is acceptable given the schema's comprehensive parameter guidance and the straightforward nature of a delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions (100% coverage), and the description adds a useful tip about sourcing mailFolderId from list-mail-folders, which complements the schema's own description without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (specified messageRule object), and adds 'permanently' to clarify irreversibility. Clearly distinguishes from sibling update-mail-rule by focusing on deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear that it deletes a message rule; the tip about obtaining the Inbox folder ID from list-mail-folders gives a concrete usage scenario. Does not explicitly mention alternative tools, but the delete purpose is unambiguous and the tip is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-my-calendar-permissiondelete-my-calendar-permissionADestructive
Delete my calendar permission.
💡 TIP: Revokes a calendar share or delegate access. Get the permission id via list-my-calendar-permissions. Permissions where isRemovable=false (e.g. the implicit 'My Organization' default) cannot be deleted — Graph returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| calendarPermissionId | Yes | Value for the 'calendarPermissionId' path segment. Pass it under the name 'calendarPermissionId', not as 'id'. Use the 'id' field of the calendar permission object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the bar is lower. The description adds valuable behavioral context beyond annotations: it states that this revokes share/delegate access, that non-removable permissions (e.g., implicit 'My Organization') will cause a Graph error, and that the permission id comes from list-my-calendar-permissions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero fluff. The core action is front-loaded, followed by the practical tip and error condition. The emoji and line break aid readability without wasting space. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive delete tool with no output schema, the description covers all needed operational details: how to obtain the required id, likely error conditions, and the exact scope ('my'). Annotations cover the destructive nature, and the schema covers parameters. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all params, so baseline is 3. The description adds extra meaning: the tip to fetch the permission id from list-my-calendar-permissions and the note about isRemovable=false affecting deletion. This provides context beyond the schema's param descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Delete my calendar permission') and clarifies the action as revoking calendar share or delegate access. It distinguishes itself from sibling tools like list/create/update-my-calendar-permission by being the delete operation, so an agent can easily identify it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable usage guidance: tells the agent to get the permission id via list-my-calendar-permissions and warns about non-removable permissions (isRemovable=false) that will cause an error. It doesn't explicitly mention alternatives but clearly implies this is for deletion, and the 'when not to use' (non-removable) is covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-onedrive-filedelete-onedrive-fileADestructive
Delete a OneDrive file.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| If-Match | No | ETag | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the agent knows this is destructive. The description adds no additional behavioral context (e.g., whether deletion is permanent, if recycle bin is used, or any consequences). The 'confirm' parameter is documented in the schema, not the description, and the description does not mention the destructive nature beyond the name. Since annotations cover the destructive hint, a baseline of 3 is appropriate, but the description could add details about permanence or recovery.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, very concise and front-loaded with the core action. It is not verbose. It could include a bit more detail about usage context but achieves the goal of being concise. Given the tool's simplicity and the rich schema, a single sentence is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deletion tool with two required parameters, the schema descriptions are thorough and the annotations cover the destructive nature. The description does not need to explain return values because there is no output schema. The tool is relatively simple, and the schema provides enough context for the agent to call it correctly. The only missing piece is explicit mention of when to use this vs. alternatives, but given the sibling list, the name is self-explanatory. Overall, complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. However, the schema descriptions are unusually detailed: they explain that 'driveId' and 'driveItemId' must be passed under those exact names (not 'id') and how to obtain them from the drive object. This adds value beyond the basic type and required flags. The 'confirm' parameter is well-explained with the gate behavior. The description itself adds little, but the schema carries the semantic weight, so a 4 is justified because the schema descriptions are exceptionally clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('a OneDrive file'). It is distinct from sibling tools like 'delete-drive-item-permission' and 'move-rename-onedrive-item' because it focuses on deleting the file itself. However, it does not explicitly differentiate from other deletion tools in the OneDrive family, though the name itself is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It is implied that this is the tool for deleting a specific file when you have its driveId and driveItemId. No exclusions or alternative tool mentions are given, but the context of sibling tools (e.g., deleting permissions, moving files) makes the purpose relatively clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-onenote-pagedelete-onenote-pageADestructive
Delete a OneNote page.
💡 TIP: Deletes a OneNote page permanently. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| onenotePageId | Yes | Value for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds a crucial detail that the deletion is permanent and irreversible, which is not redundant. It does not contradict annotations. The description also does not mention potential side effects like cascading deletions, but given the annotations, the added permanence tip is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a single declarative sentence plus a short tip. The main purpose is front-loaded, and every word earns its place with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward destructive operation with annotations covering safety and a schema fully detailing parameters. However, it lacks usage guidance (when to delete versus other actions), which is a notable gap for an agent selecting among many OneNote-related tools. The lack of an output schema is acceptable since it is a delete operation, but the missing usage context prevents a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with all five parameters (confirm, If-Match, onenotePageId, includeHeaders, excludeResponse) described. The description adds no parameter-level information, so it neither compensates nor detracts. Baseline of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Delete a OneNote page.' The tip adds that it is permanent and cannot be undone, which further clarifies the exact intent. It is distinct from other sibling tools that target different resources (e.g., delete-calendar, delete-onedrive-file).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or context for deletion. There is no reference to other OneNote operations (like moving a page or creating a page) that an agent might consider instead. The tool name and schema imply usage, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-outlook-contactdelete-outlook-contactBDestructive
Delete a contact.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| contactId | Yes | Value for the 'contactId' path segment. Pass it under the name 'contactId', not as 'id'. Use the 'id' field of the contact object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint: true, so the description isn't required to state that deletion is destructive. However, it adds no extra context—such as irreversibility, permission requirements, or effects on related data—beyond what the annotation provides. It neither contradicts nor enriches the behavioral understanding, earning a baseline score given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the action without extraneous detail, which is appropriately sized for a simple deletion operation. It could never be more concise without losing completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description is minimal but not entirely inadequate. It doesn't mention that deletion is permanent, but the annotation covers destructiveHint. It also doesn't explain the confirm gate or ETag behavior, though the schema does. Given the tool's simplicity and the rich schema, it's acceptable but could benefit from one caveat about irreversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, thoroughly explaining the confirm gate, ETag, contactId, includeHeaders, and excludeResponse. The description adds nothing to parameter meaning—it doesn't even mention them. Baseline of 3 is appropriate because the schema carries the full semantic burden and the description doesn't need to repeat it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('a contact'), which clearly distinguishes it from sibling tools like 'update-outlook-contact' and 'create-outlook-contact'. The action is unambiguous and the tool name reinforces it, so an agent can easily infer the purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites, such as requiring the user's explicit approval for a destructive operation or the confirm gate. There is no indication of when deletion is appropriate versus other contact operations, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-planner-bucketdelete-planner-bucketADestructive
Delete plannerBucket.
💡 TIP: CRITICAL: Requires If-Match header with ETag from get-planner-bucket (use includeHeaders=true).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| plannerBucketId | Yes | Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the destructive nature is clear. The description adds important behavioral context beyond the annotations: the ETag requirement and the need to fetch it first. This is valuable and does not contradict annotations. The description could further disclose post-deletion effects, but given the annotation coverage, the additional context is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line for the purpose and one line for the critical prerequisite. It is front-loaded with the action and the crucial tip. Every sentence earns its place, with zero waste. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 5 parameters and no output schema, the description covers the essential operational requirement (the ETag prerequisite). It does not explain the return format or side effects, but given the simplicity of a delete operation and the schema covering parameters, the description is sufficiently complete. It could mention the confirm gate, but that is already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter has a description in the schema. The tool description does not add any parameter-specific semantics beyond what the schema provides. Baseline is 3 per calibration, and the description does not compensate with additional details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Delete plannerBucket' with a clear verb and resource. It unambiguously identifies the action and distinguishes it from sibling tools like update-planner-bucket or create-planner-bucket. The purpose is specific and immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance via the critical tip: it requires an If-Match header with an ETag from get-planner-bucket (obtained with includeHeaders=true). This tells the agent the necessary prerequisite and sequence. It does not mention alternatives or when not to use it, but it gives clear context for the main workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-planner-task-messagedelete-planner-task-messageADestructive
[beta] Delete a plannerTaskChatMessage object.
💡 TIP: Deletes a message from a Planner task's chat. No request body; If-Match is optional if you want conditional deletion; returns 204. BETA Graph API: subject to change; delegated work/school accounts only — no application permissions, no personal Microsoft accounts, global cloud only (not GCC/DoD/21Vianet).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| plannerTaskChatMessageId | Yes | Value for the 'plannerTaskChatMessageId' path segment. Pass it under the name 'plannerTaskChatMessageId', not as 'id'. Use the 'id' field of the planner task chat message object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations (destructiveHint=true) by detailing behavior: no request body, optional If-Match for conditional deletion, 204 response, and clear limitations (beta, delegated work/school accounts, global cloud only). This gives the agent a solid understanding of constraints and effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and well-structured: opens with the purpose, then a useful tip with key operational details, and closes with limitations. Every sentence adds information; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete tool with two required path parameters and a well-documented schema, the description covers purpose, behavior, return code, and constraints. With no output schema, it doesn't need to explain return values. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, so the baseline is 3. The description adds value by explaining that If-Match is optional and for conditional deletion, which the schema label 'ETag' doesn't fully convey. However, it doesn't elaborate on the required path parameters beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation 'Delete a plannerTaskChatMessage object' and adds a clarifying tip that it deletes a message from a Planner task's chat. Clearly distinguishes from sibling tools like create and list by using the delete verb and target resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on deletion and conditional deletion with If-Match, and notes account/cloud restrictions. It doesn't explicitly name alternatives or say 'use this when you want to remove a message', but the purpose is unambiguous so an agent can infer the right time to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-specific-calendar-eventdelete-specific-calendar-eventADestructive
Delete a specific calendar event. Requires calendarId (the target calendar's ID) and eventId (the event's own ID).
💡 TIP: Deleting a seriesMaster deletes ALL occurrences. To cancel a single occurrence, use the specific instance ID.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| If-Match | No | ETag | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavioral detail the annotations cannot convey: that deleting a seriesMaster cascades to ALL occurrences, which materially affects the agent's choice of ID. It does not mention the confirm gate, but the schema parameter documents that fully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then required params, then a clearly marked TIP. Two compact sentences plus one line of guidance, with minimal waste; the only slight redundancy is restating the two required IDs that the schema already names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 6-parameter operation with no output schema, the description covers the action, the required identifiers, and the highest-risk behavioral trap (occurrence cascade). Annotations carry the safety signal and the schema carries the confirm gate, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so calendarId, eventId, confirm, If-Match, includeHeaders and excludeResponse are all self-documenting. The description names calendarId and eventId but adds no format, syntax, or constraint detail beyond what the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a specific calendar event') so the agent knows the operation immediately. However, the sibling set contains both 'delete-calendar-event' and 'delete-specific-calendar-event', and the description does nothing to explain how this tool differs from that near-identical sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP gives real conditional guidance: deleting a seriesMaster wipes all occurrences, so use a specific instance ID to cancel just one. That is genuinely actionable routing advice. It still does not say when to prefer this over 'delete-calendar-event' or 'cancel-calendar-event', so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-subscriptiondelete-subscriptionADestructive
Delete a subscription. For the list of resources that support subscribing to change notifications, see the table in the Permissions section.
💡 TIP: Deletes a webhook subscription. No further change notifications will be sent. Use this to clean up stale subscriptions or stop receiving notifications. Use list-subscriptions to find the id.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| subscriptionId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, covering the safety profile. The description adds meaningful behavioral context by stating that no further change notifications will be sent after deletion, which is a direct consequence beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences plus a tip. No fluff, all content earns its place, and the core action is front-loaded. The tip is supplementary but highly relevant and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive delete operation with no output schema, the description covers the core function, the consequence, and how to locate the target. It omits details like idempotency or error handling, but those are not essential for an agent to invoke correctly. The permissions link offers additional context. Complete enough for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are already documented. The description's tip ('Use list-subscriptions to find the id') adds practical guidance for the subscriptionId parameter that goes beyond the schema's purely positional description. This extra hint elevates it above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Delete a subscription') and immediately clarifies it refers to webhook subscriptions via the tip. It is clearly distinguishable from siblings like update-subscription, get-subscription, and list-subscriptions. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('clean up stale subscriptions or stop receiving notifications') and provides a concrete pointer to the sibling tool list-subscriptions for finding the target id. It gives actionable context without needing inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-todo-linked-resourcedelete-todo-linked-resourceCDestructive
Delete a linkedResource object.
💡 TIP: Removes a linked resource from a To Do task.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| todoTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| linkedResourceId | Yes | Value for the 'linkedResourceId' path segment. Pass it under the name 'linkedResourceId', not as 'id'. Use the 'id' field of the linked resource object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral traits beyond what annotations already provide. Since destructiveHint is true and readOnlyHint is false, the agent already knows this is destructive. The description adds no additional context about irreversibility, confirmation, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, comprising two short sentences. It front-loads the operation and adds a helpful tip, but it is sparse. It is appropriately sized for a simple delete, though it lacks useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive operation with no output schema, the description lacks details about return values, error conditions, or confirmation requirements. The schema includes a confirm parameter for destructive operations, but the description does not mention it, leaving the agent without guidance on confirmation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 7 parameters with descriptions (100% coverage). The description adds no parameter-specific meaning beyond what the schema provides, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'linkedResource object', and the tip adds that it removes a linked resource from a To Do task. This gives a clear purpose, though it doesn't explicitly differentiate from sibling delete tools, but the resource name does that.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or conditions, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-todo-taskdelete-todo-taskCDestructive
Delete a todoTask object.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| todoTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description 'Delete' aligns with that. However, the description adds no additional behavioral context beyond what the annotations provide. It doesn't mention side effects, required permissions, reversibility, or the confirm gate that might be mandatory. Given the annotations cover the core destructive nature, the description contributes nothing extra, earning a 2.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, 'Delete a todoTask object.' It's minimal and efficient with no wasted words. For a straightforward delete operation, this is appropriately sized, though it could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation, the description is too sparse. It doesn't mention the confirm gate requirement (even though it's in the schema, the description doesn't point to it), nor does it provide any context about irreversible consequences or when confirmations are needed. The output schema is absent, but the description doesn't clarify return behavior either. An agent has to rely entirely on schema and annotations, which are sufficient for parameters but not for usage context. This is incomplete for a delete operation of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning all six parameters are documented in the schema with descriptions. The tool description itself provides no additional semantic meaning for the parameters. Since the schema fully describes parameters like todoTaskId and the confirm gate, the baseline 3 applies—the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a todoTask object.' clearly states the verb (delete) and the resource (todoTask), making the purpose unambiguous. It doesn't explicitly differentiate from sibling delete tools like delete-todo-task-list, but the resource name is specific enough to avoid confusion. A 4 is appropriate because it's clear but doesn't provide any additional context about scope or variations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any conditions, prerequisites, or scenarios. The confirm gate behavior is described in the schema parameter, but the description itself gives no usage context or exclusions. An agent would have no idea from the description alone when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-todo-task-listdelete-todo-task-listADestructive
Deletes a todoTaskList object.
💡 TIP: Deletes a Microsoft To Do task list. Built-in lists (Flagged emails, the default Tasks list) cannot be deleted — the API returns an error for those. Get list ids via list-todo-task-lists.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| If-Match | No | ETag | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds the specific behavioral trait that built-in lists (Flagged emails, default Tasks) return an error, which is beyond the annotations. This enriches the agent's understanding without contradicting the metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The core action is front-loaded, and the tip adds critical caveats without verbosity. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive delete operation with no output schema, the description covers the essential behavior, key limitation, and how to obtain the required parameter. It doesn't explain return values or error handling beyond the built-in list case, but given the annotations cover the destructive nature and the schema covers all parameters, this is reasonably complete. A minor gap is not mentioning idempotency or whether deleting a nonexistent list errors, but that's not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter (todoTaskListId, confirm, If-Match, includeHeaders, excludeResponse) is already documented with clear meaning. The description only reiterates getting ids via list-todo-task-lists, which is usage guidance rather than additional parameter semantics. Baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Deletes') and resource ('todoTaskList object'), and clarifies it is a Microsoft To Do task list. This distinguishes it from other delete tools like delete-todo-task or delete-calendar, and the tip about built-in lists adds further scope precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use it (delete a Microsoft To Do task list) and explicitly notes a limitation: built-in lists cannot be deleted and will cause an error. It also directs to list-todo-task-lists to obtain ids, which serves as a prerequisite. However, it doesn't explicitly contrast with sibling delete-todo-task or other alternatives, so it's not a full when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss-calendar-event-reminderdismiss-calendar-event-reminderADestructive
Dismiss a reminder that has been triggered for an event in a user calendar.
💡 TIP: Dismisses a triggered event reminder so it won't re-fire. No request body required. Pair with list-calendar-events or get-schedule to find active reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is known. The description adds that dismissal prevents re-firing and requires no body, which adds behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The purpose is front-loaded, and the tip provides extra usage context without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter, a fully documented schema, and destructive annotations, the description covers purpose, usage, and pairing. No missing information an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, including the confirm gate and eventId naming. The description adds no additional parameter semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (dismiss), the resource (a triggered reminder for an event), and the effect (won't re-fire). It distinguishes from siblings like snooze-calendar-event-reminder by focusing on dismissal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit pairing guidance with list-calendar-events or get-schedule to find active reminders. Does not explicitly state when not to use (e.g., snooze instead), but the action is specific enough that the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download-bytesARead-only
Download binary content from Microsoft Graph and return it as base64. Single tool for any binary read: drive file content, mail attachment, profile photo, Teams hosted content, meeting recording. Returns { contentType, encoding: "base64", contentLength, contentBytes }. For large drive/SharePoint file content, prefer get-download-url, which returns a pre-authenticated URL to stream bytes out-of-band instead of base64 through the agent context.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already provided, the description adds valuable behavioral context by disclosing the exact return shape ({ contentType, encoding, contentLength, contentBytes }) and warning about the base64-through-context approach for large files. This goes beyond the annotation's safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it opens with the core action, lists supported use cases, states the return format, and then provides alternative guidance. Every sentence earns its place, and the most critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return format, usage alternatives, and the parameter is fully documented in the schema. There are no missing details that an agent would need to call the tool correctly, making it complete for a single-parameter read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the 'target' parameter fully documented via examples. The tool description itself does not add parameter-level semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Download'), resource ('Microsoft Graph'), and return format ('base64'), and enumerates supported content types (drive files, mail attachments, profile photos, Teams content, meeting recordings). It differentiates from get-download-url by explicitly naming the alternative for large files, making the intent unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: it recommends get-download-url for large drive/SharePoint files and get-meeting-recording-content for meeting recordings. It also frames the tool as the 'single tool' for general binary reads, giving clear context for when it is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download-bytes-to-fileARead-only
Write authenticated Microsoft Graph byte content to a local file on the server, returning { path, contentType, bytesWritten } instead of base64. The only out-of-band way to save mail attachments and meeting recordings, whose bytes are exposed solely through authenticated endpoints. Also handles profile photos and Teams hosted content. Writes to an absolute outputPath and never overwrites an existing file. stdio mode only: not available over HTTP. For OneDrive or SharePoint file content, get-download-url is preferred — it returns a pre-authenticated URL for fully out-of-band download without the server fetching the bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | 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. | |
| outputPath | Yes | Absolute path on the server's filesystem where the bytes are written, e.g. /Users/me/downloads/invoice.pdf. Must be absolute; relative paths are rejected. The parent directory must already exist, and an existing file is never overwritten (the call errors if outputPath already exists). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint, but the description adds substantial behavioral context: it returns a specific object shape ({path, contentType, bytesWritten}), writes to absolute paths, never overwrites existing files, and is stdio-only. It also discloses that bytes are obtained through authenticated endpoints, clarifying the tool's out-of-band nature. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by usage context and alternatives. It is somewhat lengthy (around 120 words) but each sentence carries critical information, including constraints (stdio-only, no overwrite) and sibling routing. The structure is logical: definition, use cases, limitations, and alternatives. It is not unduly verbose but could be tightened by removing a few redundant phrases (e.g., repeating 'authenticated').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two simple parameters but a wide range of supported target types (mail attachments, meeting recordings, profile photos, Teams hosted content), the description is remarkably complete. It lists common target paths, states the return format, warns about overwrite behavior, and specifies the stdio mode limitation. It also provides a clear alternative for OneDrive/SharePoint content, covering key decision points an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters already documented in detail (including common paths for target and absolute-path requirement for outputPath). The description goes beyond schema by explaining the return format and why the tool exists (authenticated bytes), but it does not add new parameter-level semantics beyond reinforcing the schema. Since the schema fully covers parameter meaning, a baseline of 3 is appropriate, and the extra context about use cases earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Write'), a specific resource ('authenticated Microsoft Graph byte content'), and a concrete action ('to a local file on the server'). It explicitly differentiates from sibling tools by noting it returns 'instead of base64' and names the preferred alternative for OneDrive/SharePoint (get-download-url). This makes the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance (the only out-of-band way to save mail attachments and meeting recordings) and when-not-to-use (for OneDrive/SharePoint, get-download-url is preferred). It also notes the stdio-only constraint and that the tool never overwrites files, offering clear operational boundaries and routing to an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format-excel-rangeformat-excel-rangeADestructive
Format an Excel range.
💡 TIP: Apply rangeFormat properties to a specific range. Required path param 'address' (e.g. 'A1:E5' or 'Sheet1!A1:E5'). Body: { horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight }. Font, fill, and borders are NOT set here; use format-excel-range-font, format-excel-range-fill, and format-excel-range-border for those.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (it modifies) and destructiveHint=true (potentially destructive). The description adds some context by specifying the properties that are set and clarifying that font/fill/borders are excluded. However, it does not mention the confirm gate or any side effects like overwriting existing formatting. It repeats the destructive nature implicitly through the property list but adds limited new behavioral detail beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It starts with a direct purpose, then a valuable tip with the most actionable info (required path param and body properties), and ends with exclusions pointing to siblings. No wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the relatively simple operation, high schema coverage, and annotations covering safety, the description is fairly complete. It tells the agent what to set, what not to set, and where to go for other formatting. It does not explain return values, but there is no output schema and the operation likely returns a simple success indicator. It omits mention of the confirm parameter (when gate enabled), but that appears in the schema and may be a general pattern across tools. Overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), but the description adds crucial meaning by listing which body properties are actually applied (horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight) and explicitly stating that font, fill, and borders are NOT set here. The address example ('A1:E5' or 'Sheet1!A1:E5') clarifies the format required. This goes beyond the schema's generic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Format an Excel range' and specifies it applies rangeFormat properties. It explicitly lists which properties are set (horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight) and distinguishes it from sibling tools (format-excel-range-font, format-excel-range-fill, format-excel-range-border) by stating what it does NOT handle. This distinguishes it effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'Apply rangeFormat properties to a specific range' and lists the relevant properties. It also gives clear exclusions: 'Font, fill, and borders are NOT set here; use format-excel-range-font, format-excel-range-fill, and format-excel-range-border for those.' This provides both when and when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format-excel-range-borderformat-excel-range-borderADestructive
Format an Excel range border.
💡 TIP: Sets one border side. The {sideIndex} path param selects which side: EdgeTop, EdgeBottom, EdgeLeft, EdgeRight, InsideVertical, InsideHorizontal, DiagonalDown, or DiagonalUp. To outline all four edges, call once per side.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| sideIndex | Yes | Value for the 'sideIndex' path segment. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, indicating a mutating operation. The description adds that it sets one border side, which is a useful behavioral detail, but it doesn't mention side effects on existing borders, reversal, or permission requirements. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and followed by a practical tip. There is no wasted text, and the tip is directly relevant to the tool's main concept of side selection. It earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, some required, the description covers the most critical nuance (sideIndex) and how to compose multiple calls. The schema handles the rest. There is no output schema, so return value explanation isn't needed. However, given the destructive annotation, it could have mentioned the confirm gate, but that is covered in the confirm parameter description, so it's acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so most parameters already have descriptions. The description adds value by explicitly listing the valid values for sideIndex (EdgeTop, EdgeBottom, etc.) and explaining how to use it for multiple sides. This goes beyond the schema's generic 'Value for the 'sideIndex' path segment.' The body parameters (color, style, weight) are well-covered in the schema, so no need to repeat.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Format an Excel range border' which clearly identifies the verb and resource. It distinguishes from sibling formatting tools (fill, font) by specifying 'border', and the tip clarifies it sets one border side. However, it doesn't explicitly state that it sets the style, color, and weight of that side, which would make it even more precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usage guidance on how to outline all four edges by calling once per side, and explains the sideIndex parameter selects the side. However, it does not mention alternatives like format-excel-range or when to use this tool versus those siblings. There is no explicit 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format-excel-range-fillformat-excel-range-fillCDestructive
Format an Excel range fill.
💡 TIP: Set the background fill color of a range's cells.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, but the description adds no further context about behavioral effects, such as whether the existing fill is replaced, what happens if no color is provided, or whether the confirm gate applies. It does not supplement the annotation-provided safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, stating the core action in the first sentence. However, the tip is somewhat redundant with the main sentence, and the extreme brevity sacrifices important context, such as usage alternatives and behavioral details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a potentially destructive mutation tool with many sibling formatting tools, the description is insufficient. It does not explain consequences, how it interacts with the confirm gate, or when to prefer it over other formatting tools. The agent lacks guidance on critical decisions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so parameters like color, address, driveId, etc. are already well-documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Format an Excel range fill') and the tip clarifies that 'fill' means the background fill color. It distinguishes this from other formatting tools like format-excel-range-font and format-excel-range-border, though not explicitly by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention that this should be used specifically for setting background fill color as opposed to font or border formatting, nor does it note any exclusions or prerequisites. The tip is a restatement, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format-excel-range-fontformat-excel-range-fontBDestructive
Format an Excel range font.
💡 TIP: Set font formatting on a range: bold, italic, underline, size, color, and font name.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=true, so it is a destructive write operation. The description adds no behavioral details beyond this, such as whether existing formatting is overwritten, whether confirmation is needed, or any permission requirements. With annotations present, the bar for additional disclosure is lower, but the description provides no extra context about the operation's effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence followed by a helpful tip. The main purpose is front-loaded, and the tip adds actionable detail without redundancy. There is no fluff, and every phrase contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a simple purpose and well-described parameters, the description is adequate. The annotations cover the destructive nature and confirm gate, and the schema covers the required parameters. However, it does not mention that formatting will overwrite existing font settings or specify any return values (though no output schema exists). It is complete enough for basic invocation but lacks a few nuanced details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so most parameters are already documented (e.g., name, size, color, underline enum). The description's tip simply lists the same properties (bold, italic, underline, size, color, font name) without offering additional meaning or examples beyond the schema. Since the schema does the heavy lifting, this score reflects that no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Format an Excel range font.' The tip adds the specific font properties that can be set (bold, italic, underline, size, color, font name). While it does not explicitly contrast with sibling tools like format-excel-range-border or format-excel-range-fill, the purpose is specific enough for an agent to distinguish it based on the font focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when font formatting is needed ('Set font formatting on a range'), which provides situational context. However, it does not mention alternatives or when not to use this tool, such as when dealing with borders or fills. The guidance is implied but not explicit, so it meets the baseline for implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward-calendar-eventforward-calendar-eventADestructive
This action allows the organizer or attendee of a meeting event to forward the meeting request to a new recipient. If the meeting event is forwarded from an attendee's Microsoft 365 mailbox to another recipient, this action also sends a message to notify the organizer of the forwarding, and adds the recipient to the organizer's copy of the meeting event. This convenience is not available when forwarding from an Outlook.com account.
💡 TIP: Forwards a meeting invitation to additional recipients. Body: { ToRecipients: [{ emailAddress: { address, name } }], Comment (optional) }. If the forwarder is an attendee (not organizer), the organizer is also notified and the new recipient is added to the organizer's attendee list.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write/destructive operation. The description adds useful behavioral detail: it forwards the meeting request, notifies the organizer when forwarding from an attendee's mailbox, and adds the recipient to the organizer's copy. It also notes the Outlook.com limitation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into a clear statement of action, side effects, and a tip. It's a bit redundant (the tip repeats some info) but remains readable and front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers the main operation, side effects, and body format. It doesn't mention the return value, but that may be less critical. It also doesn't mention permissions, which are implicit for calendar operations. Overall quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly shows the body structure: '{ ToRecipients: [{ emailAddress: { address, name } }], Comment (optional) }', which complements the schema and clarifies that Comment is optional. With 80% schema coverage, this adds meaningful guidance beyond the schema for the key body parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action forwards a meeting event to a new recipient, using specific verbs 'forward' and resource 'meeting event'. It also explains side effects (notifying organizer, adding recipient), which helps distinguish it from email-forwarding tools like forward-mail-message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (forwarding meeting requests) and notes an important limitation (not available for Outlook.com accounts). However, it doesn't explicitly name alternative tools or state when not to use it beyond the account limitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward-mail-messageforward-mail-messageADestructive
Forward a message using either JSON or MIME format. When using JSON format, you can:
Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.
Specify either the toRecipients parameter or the toRecipients property of the message parameter. Specifying both or specifying neither will return an HTTP 400 Bad Request error. When using MIME format:
Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.
Add any attachments and S/MIME properties to the MIME content. This method saves the message in the Sent Items folder. Alternatively, create a draft to forward a message, and send it later.
💡 TIP: Forward an email preserving full HTML formatting and attachments. The 'comment' field adds text above the forwarded content. toRecipients is required. Do NOT reconstruct the email manually - this endpoint handles everything server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give readOnlyHint=false and destructiveHint=true, but the description adds concrete behavioral details: 'This method saves the message in the Sent Items folder' and specifies error behaviors for invalid parameter combinations. It also clarifies that the endpoint handles everything server-side. This goes beyond annotation basics, though it could mention more peripheral effects (e.g., whether attachments are preserved automatically). Still, it provides solid transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise given the complexity, using clear bullet points for the two formats and a TIP for practical guidance. It front-loads the core action and error rules, and the TIP is a valuable addition. It is long but each segment earns its place; no redundant filler. Slight over-length could be trimmed, but it's well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested object schema, required fields, and no output schema, the description covers the essential constraints (format selection, parameter mutual exclusivity, the Sent Items behavior, and the draft alternative). It would benefit from brief mention of MIME header requirements and the confirm parameter's role, but overall it provides enough context for an agent to call the tool correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so baseline is 3. The description adds significant semantic value: it explains mutual exclusivity of comment/body and toRecipients rules, clarifies MIME base64 encoding, and gives explicit guidance on passing messageId ('Pass it under the name messageId'). It also highlights that toRecipients is required. This compensates for the schema's gaps and enhances usability beyond the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Forward a message using either JSON or MIME format.' It names a specific action (forward) and a resource (message), and distinguishes itself from siblings like 'create-forward-draft' by emphasizing direct sending. The TIP reinforces the core purpose and warns against manual reconstruction, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use JSON vs. MIME formats, including error conditions (e.g., specifying both comment and body returns HTTP 400). It also names the alternative approach: 'Alternatively, create a draft to forward a message, and send it later,' which points to the sibling tool. The TIP adds clear practical guidance ('toRecipients is required', 'Do NOT reconstruct the email manually'). This fully addresses tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-calendar-eventget-calendar-eventCRead-only
Get the properties and relationships of the specified event object. Currently, this operation returns event bodies in only HTML format. There are two scenarios where an app can get an event in another user's calendar: Since the event resource supports extensions, you can also use the GET operation to get custom properties and extension data in an event instance.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the bar is lower. The description adds that event bodies are returned only in HTML format and mentions support for extensions/custom properties, which is useful. However, it does not disclose pagination behavior, response size limits, or potential errors, and the second sentence is confusing rather than illuminating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but poorly structured. The second sentence contains a grammatical error and a redundant colon, making it confusing. While the core purpose is front-loaded, the remainder lacks coherence, and the sentence about extensions is tangential and not clearly connected to the tool's operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the response contains; it only vaguely says 'properties and relationships' without specifics. It also fails to distinguish this tool from get-specific-calendar-event and does not mention how to obtain eventId from a prior list call. The detailed schema covers parameters, but overall the description leaves an agent with unresolved questions about when and how to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions themselves are exceptionally detailed (e.g., expand, select, timezone, fetchAllPages). The tool description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the properties and relationships of a specified event object, which conveys the core action. However, it does not differentiate from sibling tools like get-specific-calendar-event or list-calendar-events, and the second sentence about scenarios is vague and obscures the main purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The mention of 'two scenarios where an app can get an event in another user's calendar' is ambiguous and does not help an agent choose between this, get-specific-calendar-event, or list-calendar-event-instances. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-calendar-viewget-calendar-viewARead-only
Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the user's default calendar, or from some other calendar of the user.
💡 TIP: Returns expanded recurring event instances (not just seriesMaster) within a date range for the default calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use get-specific-calendar-view if you need a non-default calendar. To find Teams meetings, use $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). To search by subject, use $filter=contains(subject,'keyword'). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| endDateTime | Yes | The end date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00 | |
| fetchAllPages | No | 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. | |
| startDateTime | Yes | The start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00 | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral detail beyond that: it returns expanded recurring event instances rather than just seriesMaster, isOnlineMeeting is not filterable and returns 400 ErrorInvalidProperty, the event resource has no joinWebUrl property, and joinUrl must be used to reach transcripts. These are non-obvious API behaviors an agent would otherwise discover only by failing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but each section earns its place: general purpose, key behavior, sibling routing, Teams-meeting query guidance, and joinUrl workflow. It is front-loaded with the main definition. The slight redundancy between 'or from some other calendar of the user' and 'Use get-specific-calendar-view if you need a non-default calendar' costs it a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only calendar-view tool with 16 parameters and no output schema, the description covers the essential call requirements: time range, recurring-instance expansion, default-calendar scope, and the Teams/search use cases. The schema covers the remaining parameter semantics. It does not explicitly describe the response shape, but the phrase 'occurrences, exceptions, and single instances of events' gives a sufficient mental model.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the individual parameter descriptions are already rich, including ISO 8601 formats, timezone behavior, pagination, and OData query semantics. The tool description does not add much meaning to the parameters beyond restating that startDateTime and endDateTime are required and giving example $select/$filter expressions. Baseline 3 is appropriate because the schema carries the parameter-documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: getting occurrences, exceptions, and single instances of events in a time-bounded calendar view. It also names the sibling get-specific-calendar-view for non-default calendars, which helps differentiate it. However, the first sentence says 'or from some other calendar of the user' while the tip says to use get-specific-calendar-view for a non-default calendar, introducing a minor scope inconsistency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use get-specific-calendar-view instead, and gives concrete guidance for Teams meetings and subject searches. It also notes required parameters and provides a downstream workflow to list-online-meetings. This is strong, actionable alternative-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-current-userget-current-userARead-only
Retrieve the properties and relationships of user object. This operation returns by default only a subset of the more commonly used properties for each user. These default properties are noted in the Properties section. To get properties that are not returned by default, do a GET operation for the user and specify the properties in a $select OData query option. Because the user resource supports extensions, you can also use the GET operation to get custom properties and extension data in a user instance. Customers through Microsoft Entra ID for customers can also use this API operation to retrieve their details.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| ConsistencyLevel | No | Indicates the requested consistency level. Documentation URL: https://docs.microsoft.com/graph/aad-advanced-queries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, covering safety. The description adds valuable context about default return behavior (subset of properties), the use of $select to retrieve non-default properties, and support for extensions. This goes beyond annotations and informs the agent about output variability, though it does not mention pagination or error behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized with clear structure: purpose first, then default behavior, then $select usage, then extensions. It is not overly verbose, though some redundancy exists (e.g., repeating 'GET operation'). The key information is front-loaded, making it efficient for quick reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should compensate by explaining the return structure. It mentions default properties and $select, but does not list what those defaults are or describe the response shape. It also does not explicitly state that this returns the current user, relying on the tool name. For a read operation with annotations covering safety, this is adequate but leaves gaps for an agent expecting full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are documented. The description enhances the 'select' parameter by explaining that by default only a subset is returned and that $select can fetch additional properties. It also mentions extensions, adding context beyond the schema. However, it does not clarify other parameters like 'expand' or 'fetchAllPages', leaving some semantics to the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve') and resource ('user object'), making the tool's purpose understandable. However, it does not explicitly mention 'current' in the description, relying on the tool name, and it does not differentiate itself from the sibling 'get-my-profile' which might serve a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any sibling tools or conditions under which this tool should be preferred. The agent is left to infer usage from the name and description without explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-download-urlARead-only
Resolve a short-lived, pre-authenticated download URL for Microsoft Graph binary content that exposes one (drive/SharePoint file content). The returned URL streams the bytes with NO Authorization header, so the client can fetch it straight to disk (e.g. curl) without round-tripping base64 through the agent context. Prefer this over download-bytes for any file above a few KB or any bulk download. Returns { downloadUrl, name?, size?, contentType? }. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | 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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=true and openWorldHint=true. The description goes well beyond them: the URL is short-lived and pre-authenticated, streams bytes with NO Authorization header, is single-use for attachment endpoints, and depends on the --enable-attachment-urls server flag with a defined fallback response. That is substantive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core resolution behavior, then the sibling preference, then the return shape, then edge cases. It is dense but every sentence carries information. The single long paragraph is slightly heavy, which keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by declaring the return shape { downloadUrl, name?, size?, contentType? }. Combined with the alternative-tool routing and the attachment server-flag behavior, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so target's syntax (leading '/', driveItem content vs item path, auto-stripping of trailing /content) is already documented. The description adds value by clarifying the attachment/meeting-recording call path and server-flag nuance, though that clarification partially conflicts with the schema text that flatly says those paths are 'not supported'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Resolve) and resource (short-lived, pre-authenticated download URL for Microsoft Graph binary content), and explicitly names the scope of what it applies to. It distinguishes itself from download-bytes by naming that sibling and the condition that separates them, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the selection rule: 'Prefer this over download-bytes for any file above a few KB or any bulk download.' It also covers non-obvious cases (mail attachment $value paths, meeting recordings) and tells the agent to call anyway because a flagged server mints its own URL, with the failure behavior described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-drive-deltaget-drive-deltaARead-only
Track changes in a driveItem and its children over time. Your app begins by calling delta without any parameters. The service starts enumerating the drive's hierarchy, returning pages of items and either an @odata.nextLink or an @odata.deltaLink, as described below. Your app should continue calling with the @odata.nextLink until you no longer see an @odata.nextLink returned, or you see a response with an empty set of changes. After you have finished receiving all the changes, you may apply them to your local state. To check for changes in the future, call delta again with the @odata.deltaLink from the previous response. Deleted items are returned with the deleted facet. Items with this property set should be removed from your local state.
💡 TIP: Tracks changes to a driveItem and its children over time. Returns a collection of driveItems that have been created, modified, or deleted. Use get-drive-root-item first to get the root driveItem-id, then pass it here. Supports $select and delta tokens for incremental sync via @odata.deltaLink.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavior beyond the annotations: pagination via @odata.nextLink, state synchronization via @odata.deltaLink, and handling of deleted items through the deleted facet. This gives the agent a clear model of how delta works. It loses a point because the 'without any parameters' line is an inaccurate behavioral statement that could lead to incorrect invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than necessary and duplicates content: the main text and the tip both state that the tool tracks changes in a driveItem and its children. The detailed pagination workflow is useful, but phrases like 'as described below' add filler. The structure is readable but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return behavior. It does this reasonably well by mentioning pages of driveItems, @odata.nextLink/@odata.deltaLink, empty change sets, and the deleted facet. It also explains the prerequisite of obtaining the root driveItem via get-drive-root-item. The main gap remains the contradictory no-parameters guidance and the lack of a more explicit response shape, but overall an agent gets enough context to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters and the description only needs to add value beyond that. It does add helpful context in the tip: use get-drive-root-item first and pass the root driveItem-id, plus supports $select and delta tokens. However, it does not substantially clarify the remaining parameters beyond what the schema already provides, and the 'without any parameters' line undermines the required-path-parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's core purpose: 'Track changes in a driveItem and its children over time' and reinforces that it returns driveItems that were created, modified, or deleted. This is specific enough to convey the main operation, though it does not explicitly distinguish itself from sibling delta tools like list-calendar-events-delta or list-mail-folder-messages-delta.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a detailed workflow: start with delta, follow @odata.nextLink, apply changes, and later use @odata.deltaLink. The tip adds a concrete prerequisite: use get-drive-root-item first to obtain the driveItem-id. However, the statement 'begins by calling delta without any parameters' directly conflicts with the required driveId and driveItemId parameters, which is misleading for an agent deciding how to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-drive-itemget-drive-itemARead-only
All items contained in the drive. Read-only. Nullable.
💡 TIP: Gets metadata for a file or folder: name, size, lastModifiedDateTime, createdBy, webUrl, file (mimeType, hashes), folder (childCount), parentReference, and @microsoft.graph.downloadUrl. For large drive/SharePoint files, call get-download-url with target=/drives/{drive-id}/items/{driveItem-id}/content to fetch out-of-band with no Authorization header. For small files where base64 in the tool response is acceptable, call download-bytes with the same /content target.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=true and destructiveHint=false, the description adds useful behavioral context: 'Read-only. Nullable.' and the fact that the response includes a download URL (@microsoft.graph.downloadUrl). It does not disclose auth requirements or error behavior, but the annotations cover the safety profile and the description extends it with response-level details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively compact, but the first sentence 'All items contained in the drive. Read-only. Nullable.' is a cryptic fragment that does not earn its place and actively muddies the purpose. The TIP paragraph is useful and well-structured, but the weak opener prevents a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metadata lookup with a fully documented schema, the description covers the essential context: what the item is, what fields are returned, and when to switch to download tools. It does not explain return shapes or pagination, but given the schema's completeness and the read-only nature, it is adequate. The misleading opener is the main gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema fully documents all seven parameters. The description does not add any extra meaning to parameters like driveId, driveItemId, expand, or select; it only references the /content target in the context of other tools. This meets the baseline of 3 for high coverage with no additional description compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Gets metadata for a file or folder' and enumerates the specific fields returned, which distinguishes it from listing or downloading tools. However, the opening sentence 'All items contained in the drive. Read-only. Nullable.' is misleading and could suggest this tool lists all drive items, creating initial confusion before the clarifying TIP.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use alternatives: 'For large drive/SharePoint files, call get-download-url...' and 'For small files... call download-bytes.' This clearly routes agents to the right tool for content retrieval. It does not explicitly contrast with get-drive-root-item or list-folder-files, but the focus on metadata by ID is implicitly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-drive-root-itemget-drive-root-itemCRead-only
The root folder of the drive. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description's 'Read-only' duplicates that annotation without adding new behavioral context such as response format, auth requirements, or limitations. No extra value is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short, but the 'Read-only' phrase is redundant with the annotation. Every word does not earn its place; the resource clarification is useful, but the duplicate safety hint wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with schema-covered parameters, the description identifies the resource correctly. However, it omits any mention of the return value structure, pagination, or how this differs from other drive-item tools. Given no output schema, an agent might expect more clarity about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no parameter-specific meaning, which aligns with the baseline of 3 given complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (the root folder of the drive) and implies the getter operation through the tool name. It is unambiguous and distinct from sibling get-drive-item, though it lacks an explicit verb like 'retrieves' or 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get-drive-item or list-folder-files. The description does not mention any context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-excel-rangeget-excel-rangeCRead-only
Get an Excel range.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Value for the 'address' path segment. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds no extra behavioral context—no mention of pagination (though fetchAllPages exists), response structure, or potential limitations. It fails to provide any value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff, which is concise. However, it is too minimal to be well-structured; it lacks any contextual organization or flow that would help an agent parse critical information quickly. It's under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has 7 parameters, 4 required, no output schema, and numerous sibling tools. The description is woefully incomplete—it doesn't explain what the tool returns (e.g., cell values, formulas, metadata), how to format the address parameter, or any caveats about range size. The schema covers parameter syntax but not the tool's overall behavior, leaving agents underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all parameters are described in the schema itself (e.g., driveId, address, fetchAllPages). The tool description adds no parameter-level information, so it doesn't enhance what the schema already provides. Per rubric, a baseline of 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('Excel range'), which clearly differentiates it from sibling tools like get-excel-table or get-excel-used-range. However, it doesn't specify whether the tool returns values, formatting, or the range object itself, making the purpose slightly vague but still understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get-excel-used-range or get-excel-table. There are no usage contexts, exclusions, or conditions mentioned, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-excel-range-formatget-excel-range-formatARead-only
Returns a format object, encapsulating the range's font, fill, borders, alignment, and other properties. Read-only.
💡 TIP: Reads a range's format: alignment, wrapText, columnWidth, rowHeight. Font, fill, and borders are nested and omitted by default; add font, fill, and borders to the $expand parameter to include them in one call. Cell styling often encodes meaning (a fill or font color flagging status such as tentative or reconciled), so expand these to interpret what the cells mean.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| address | Yes | Value for the 'address' path segment. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds genuinely useful behavior beyond that: font, fill, and borders are nested and omitted by default, and expanding them is required to retrieve them in one call. It also explains that cell styling can carry semantic meaning, which helps agents interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides a focused tip about omitted nested properties. It is slightly repetitive (font/fill/borders appear twice) and uses a tip header, but every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations and fully covered input schema, the description supplies the missing behavioral context: what the format object contains, which properties are omitted by default, and why expanding them matters. No output schema exists, so describing the return shape in this way is appropriately complete for a read-only retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the practical effect of the expand parameter for this specific tool (including nested font, fill, and borders), which is not evident from the generic expand schema description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Returns a format object' for a specific range and enumerates the relevant properties (font, fill, borders, alignment). Marking it 'Read-only' differentiates it from mutation-focused siblings like format-excel-range and value-focused get-excel-range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it to read a range's format, and use the expand parameter when nested font/fill/borders are needed. It does not explicitly name alternatives or state when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-excel-tableget-excel-tableARead-only
Represents a collection of tables associated with the workbook. Read-only.
💡 TIP: Gets a specific table by name or ID. Returns table properties including columns, showHeaders, showTotals, and style.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookTableId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context that the call returns table properties such as columns, showHeaders, showTotals, and style, and it reinforces read-only behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short and the tip is useful, but the first sentence 'Represents a collection of tables associated with the workbook' is a poor opener and somewhat at odds with a get-specific-table operation. The word 'Read-only' also duplicates the readOnlyHint annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description satisfies the key return-value need by listing returned table properties, while the schema thoroughly handles input parameter semantics. It does not mention how to discover the workbookTableId or when to prefer list-excel-tables, but for a safe read-only getter these are modest gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a detailed description, including OData expand/select caveats and the fetchAllPages warning. The tool description adds only a 'by name or ID' lookup notion, which does not materially improve on what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tip clearly states a specific verb and resource: 'Gets a specific table by name or ID' and enumerates returned properties. However, the opening sentence 'Represents a collection of tables associated with the workbook' conflicts with the singleton nature of the operation and does not explicitly differentiate from sibling list-excel-tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is implied by 'Gets a specific table'—an agent can infer this is for targeted lookup rather than listing. There is no explicit when-to-use guidance, no mention of list-excel-tables as the alternative for enumerating tables, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-excel-used-rangeget-excel-used-rangeARead-only
Get an Excel used range.
💡 TIP: Get the smallest range that encompasses any cells with values or formatting on the worksheet. Returns address, values, formulas, numberFormat, rowCount, columnCount. Use this to discover the populated bounds of a sheet before reading or appending — avoids guessing how far data extends. Optional $select to trim the response.
| Name | Required | Description | Default |
|---|---|---|---|
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering safety. The description adds behavioral detail by enumerating the returned fields (address, values, formulas, numberFormat, rowCount, columnCount) and explaining that it returns the smallest encompassing range. It also hints at response trimming via $select. This goes beyond the annotations and gives the agent a clear picture of the operation's result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, with the core purpose first, then a tip explaining the concept, a list of return fields, and a usage recommendation. It is front-loaded, informative, and free of fluff. Every sentence contributes to understanding the tool's function and value. Structure is exemplary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with high schema coverage and safety annotations, the description covers the essential aspects: what it returns, when to use it, and how to trim output. It does not describe pagination beyond the fetchAllPages parameter (already in schema) or error handling, but those are not critical for this simple operation. The absence of an output schema is compensated by enumerating returned fields. Overall, an agent has enough guidance to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described (e.g., driveId, driveItemId, workbookWorksheetId, fetchAllPages). The description does not elaborate on these parameters but adds a tip about the optional $select query, which is not in the schema. This is minor added value. Since the schema does the heavy lifting, a baseline of 3 is appropriate; the $select mention is a small bonus but not enough to raise the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get an Excel used range') and elaborates on what a used range is (smallest range with values or formatting) and what it returns (address, values, formulas, etc.). This exceeds a simple verb+resource by clarifying the semantic scope, making it distinct from siblings like get-excel-range, which retrieves an arbitrary range. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends using this tool 'to discover the populated bounds of a sheet before reading or appending,' providing clear context on when it is appropriate. It does not name specific alternative tools or exclusion conditions, but the use case is well-defined enough to guide an agent. The mention of '$select to trim the response' adds practical guidance on output control.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-mailbox-settingsget-mailbox-settingsARead-only
Get the user's mailboxSettings. You can view all mailbox settings, or get specific settings. Users can set the following settings for their mailboxes through an Outlook client: Users can set their preferred date and time formats using Outlook on the web. Users can choose one of the supported short date or short time formats. This GET operation returns the format the user has chosen. Users can set the time zone they prefer on any Outlook client, by choosing from the supported time zones that their administrator has set up for their mailbox server. The administrator can set up time zones in the Windows time zone format or Internet Assigned Numbers Authority (IANA) time zone (also known as Olson time zone) format. The Windows format is the default. This GET operation returns the user's preferred time zone in the format that the administrator has set up. If you want that time zone to be in a specific format (Windows or IANA), you can first update the preferred time zone in that format as a mailbox setting. Subsequently you will be able to get the time zone in that format. Alternatively, you can manage the format conversion separately in your app.
💡 TIP: Gets the current user's mailbox settings including automaticRepliesSetting (out-of-office status, message, scheduledStartDateTime/EndDateTime, externalAudience), language, timeZone, dateFormat, timeFormat, delegateMeetingMessageDeliveryOptions, and userPurpose.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral detail: the operation returns the user's chosen date/time formats and the time zone in the administrator's configured format, with a sequencing caveat for requesting Windows vs IANA format. This goes beyond the annotation-only safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is accurate and the TIP provides a useful compact summary, but the body is wordy and partly repetitive, especially the time-zone explanation. It earns a pass for structure but is not a model of concise front-loaded writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates by listing the returned settings categories and explaining the time-zone behavior. Combined with full parameter schema coverage and read-only annotations, the agent has enough context to select and invoke the tool correctly, though explicit permission or error expectations are not covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description does not add parameter-level semantics beyond 'get specific settings,' but with full schema coverage that is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Get the user's mailboxSettings') and notes that it can return all or specific settings. It is unambiguous about the resource, though it does not explicitly differentiate itself from the sibling update-mailbox-settings or related time-zone listers, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is useful contextual guidance, such as 'you can view all mailbox settings, or get specific settings' and a time-zone formatting caveat about updating first. However, it never explicitly says when to use this tool instead of alternatives or when not to use it, leaving sibling routing largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-mail-messageget-mail-messageARead-only
Get a single Outlook email message by its message ID, including full subject, sender, recipients, body, and attachment flags. Use list-mail-messages first to obtain the message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered outside the description. The description adds the returned fields and the prerequisite workflow, which is useful context, but it does not disclose behavior such as error cases, missing messages, or response envelope format. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first states the operation and scope, the second gives the required prerequisite. Every sentence earns its place, and the key scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with read-only annotations, a fully-documented six-parameter schema, and a clear prerequisite, the description is largely complete. It does not describe absence/error behavior or return envelope details, but nothing critical is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents all six parameters in detail. The description adds only a contextual hint that messageId comes from list-mail-messages, which is minor redundant guidance rather than new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a precise resource ('a single Outlook email message'), and the key identifier ('message ID'). It also enumerates the returned content (subject, sender, recipients, body, attachment flags), which clearly distinguishes it from sibling tools like get-mail-message-mime or list-mail-messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to call list-mail-messages first to obtain the message ID, which is a clear usage sequence. It does not mention when to prefer alternatives like get-mail-message-mime or when direct ID lookup is inappropriate, but the prerequisite guidance is valuable and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-mail-message-mimeget-mail-message-mimeARead-only
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.
💡 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.
| Name | Required | Description | Default |
|---|---|---|---|
| Accept | No | Accept header for the response representation. Defaults to "text/plain". Only set this when Graph asks for a different format — e.g. a 403 SpeakerAttributionNotAllowed on transcript content names the media type to retry with. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| includeHiddenMessages | No | Include Hidden Messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, open-world profile, so the bar is lower. The description still adds useful specifics: it returns the complete original message including headers and encoded attachments, delivered as a text MIME stream.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is crisp and front-loaded, but the TIP paragraph largely repeats it ('Download an email message as raw RFC 5322 MIME content (.eml format)') before adding the genuinely new archiving context and the list-mail-messages pointer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states the return shape (MIME stream as text, including headers and encoded attachments) and how to obtain the message ID. Adequate for a single-required-parameter read tool, though it is silent on size limits or large-message behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented in the schema (including the Accept, fetchAllPages and excludeResponse nuances). The description only restates that the message ID is the key input, adding nothing beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Download the raw MIME source (RFC 5322 .eml content) of an Outlook email message by its message ID.' This clearly distinguishes it from the sibling get-mail-message (parsed JSON) and list-mail-messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP names a concrete scenario ('Use this when archiving an email to disk preserving all original headers') and a prerequisite ('Find the message id with list-mail-messages first'). It never explicitly names get-mail-message as the alternative for non-raw retrieval, so it falls short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-mail-tipsget-mail-tipsARead-only
Get the MailTips of one or more recipients as available to the signed-in user. Note that by making a POST call to the getMailTips action, you can request specific types of MailTips to be returned for more than one recipient at one time. The requested MailTips are returned in a mailTips collection.
💡 TIP: Looks up MailTips for one or more recipients before sending an email — answers 'is this person on auto-reply / OOF?', 'will my email exceed their mailbox quota?', 'are they an external recipient?', 'is this a mailbox or distribution list?'. Body: { EmailAddresses: ['user@contoso.com', ...], MailTipsOptions: 'automaticReplies, mailboxFullStatus, customMailTip, externalMemberCount, totalMemberCount, maxMessageSize, deliveryRestriction, moderationStatus, recipientScope, recipientSuggestions' (comma-separated subset) }. Returns mailTips per recipient with the requested fields populated. Use this to short-circuit urgent emails when a recipient is OOF, or to warn before fanning out to a large DL.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to cover safety. It adds valuable context beyond annotations by explaining the POST call behavior, request body format, and the fact that it returns a mailTips collection per recipient. It does not detail errors or permissions, but these are less critical given the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, and the tip paragraph is practical but somewhat lengthy. Every sentence contributes useful information (purpose, body example, return format, usage suggestion), though it could be tightened. It is not over-verbose and maintains good structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested body object and no output schema, so the description carries the burden of explaining request and response. It covers the body format, MailTipsOptions values, and return contents ('mailTips per recipient'). It does not address edge cases like invalid recipients or error handling, but for a read-only tool with clear annotations, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (only includeHeaders and excludeResponse have descriptions). The description compensates by explaining the body structure with a concrete example: EmailAddresses array and MailTipsOptions as a comma-separated subset of allowed values. This gives agents guidance on how to construct the required body, adding significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves MailTips for recipients as seen by the signed-in user. It gives a specific verb (get) and resource (MailTips), and the tip section explains concrete use cases (auto-reply/OOF, quota, external recipient, DL). This distinguishes it from any sibling tools, none of which cover MailTips.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip explicitly says to use it 'before sending an email' and recommends it for short-circuiting urgent emails when a recipient is OOF or warning before fanned out to a large DL. It gives clear when-to-use guidance, though it does not mention alternatives or when-not-to-use. Since no sibling tool competes directly, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-my-profileget-my-profileARead-only
[beta] Retrieve the properties and relationships of a profile object for a given user. The profile resource exposes various rich properties that are descriptive of the user as relationships, for example, anniversaries and education activities. To get one of these navigation properties, use the corresponding GET method on that property. See the methods exposed by profile.
💡 TIP: Retrieves the signed-in user's rich profile - a richer object than get-current-user, exposing relationships like skills, projects, languages, education and work positions. Use $expand to pull related collections (e.g. $expand=skills,projects).
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive. The description adds useful behavior context: 'beta' status, that the profile exposes relationships, and guidance to use navigation property GET methods rather than this tool for those sub-objects. It doesn't contradict annotations. Some behavior like response size or pagination implications of $expand are not mentioned, but the annotation coverage lowers the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description has two paragraphs, and the second largely repeats the first ('rich profile' vs 'rich properties', listing overlapping relationships like skills/education). The inclusion of '💡 TIP' adds a helpful reminder but contributes to redundancy. It is not overly long, but could be tightened to one focused paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only GET tool with 5 optional parameters and no output schema, the description covers purpose, usage versus siblings, expand behavior, and navigation property handling. It does not explicitly describe response shape or size implications of expanding, but the schema and annotations fill some of this. The beta note and navigation guidance make it reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by giving a concrete example for expand ('$expand=skills,projects') and explicitly stating that expand pulls related collections, which reinforces the parameter's purpose. The other parameters are adequately described in the schema, so the description doesn't need to repeat them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve the properties and relationships of a profile object') and resource ('profile object for a given user'), and distinguishes it from get-current-user by calling it 'a richer object... exposing relationships like skills, projects, languages...'. This clearly sets it apart from the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip explicitly contrasts with get-current-user ('richer object than get-current-user') and gives concrete guidance on when to use $expand. It also states when NOT to use this tool for individual navigation properties: 'To get one of these navigation properties, use the corresponding GET method on that property.' This is explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-onenote-page-contentget-onenote-page-contentDRead-only
The page's HTML content.
| Name | Required | Description | Default |
|---|---|---|---|
| fetchAllPages | No | 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. | |
| onenotePageId | Yes | Value for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context—it does not mention how the content is returned, potential large payloads (only hinted in a parameter description), or any other runtime behavior. Since the description contributes nothing beyond annotations, it scores at the floor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but it is under-specified rather than concise. It lacks essential information about the tool's action and scope. While it is front-loaded and free of fluff, it fails to 'earn its place' because it conveys almost no useful content to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, one required, no output schema, and only basic read-only annotations, the description does not provide sufficient context. It does not explain what the HTML content represents, how it is structured, potential errors, or when it is appropriate to use. The tool's behavior is almost entirely unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description itself does not elaborate on any parameters, but the schema provides detailed descriptions for each (e.g., onenotePageId has a clear explanation of usage). Thus, the description does not need to compensate, and a baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'The page's HTML content.' is a noun phrase rather than a clear verb+resource statement. It does not explicitly state the action (e.g., 'Retrieves the HTML content of a OneNote page'), and it offers no differentiation from sibling tools like list-onenote-pages or get-onenote-page. An agent would have to infer that this tool fetches HTML content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. No mention of context (e.g., needing a specific page's content vs. listing pages), no exclusions, and no mention of preference over other retrieval tools. The lack of any usage direction leaves the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-outlook-contactget-outlook-contactCRead-only
Retrieve the properties and relationships of a contact object. There are two scenarios where an app can get a contact in another user's contact folder:
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| contactId | Yes | Value for the 'contactId' path segment. Pass it under the name 'contactId', not as 'id'. Use the 'id' field of the contact object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no extra behavioral context—no mention of pagination, expansion defaults, or response format. The incomplete sentence about scenarios fails to deliver any additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief but clearly truncated—it ends mid-sentence with a colon and no follow-up. This is not concise but incomplete. A proper description should finish the thought and possibly front-load the key usage scenario.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no output schema) and the rich parameter descriptions, the main description should explain the return behavior and any special use cases. It does not—it leaves the 'two scenarios' unresolved and provides no guidance on output structure or limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (contactId, expand, select, fetchAllPages, etc.) is already documented in the schema. The description itself adds no parameter meaning beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the core action 'Retrieve the properties and relationships of a contact object' with a specific resource (contact). It distinguishes from list operations by implying a single object retrieval. However, it starts to mention 'two scenarios' but fails to list them, leaving the purpose partially incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description begins to outline usage scenarios ('There are two scenarios where an app can get a contact in another user's contact folder') but does not complete the thought. There is no guidance on when to use this tool vs alternatives like list-outlook-contacts or get-contact from a specific folder. The agent is left without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-planner-bucketget-planner-bucketARead-only
Retrieve the properties and relationships of a plannerBucket object.
💡 TIP: Response includes @odata.etag — required as If-Match for update-planner-bucket and delete-planner-bucket. Use includeHeaders=true.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| plannerBucketId | Yes | Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds valuable behavioral context by calling out the @odata.etag in the response and its role in If-Match for update and delete operations, which goes beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one clear purpose sentence followed by a focused tip. Every sentence earns its place, and the most important operational note is immediately available to the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with a fully described required parameter and no output schema, the description covers the essential operational detail: the ETag and includeHeaders flag. It could be slightly more complete by mentioning that list-plan-buckets should be used to enumerate buckets, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so this dimension starts at baseline 3. The description adds practical semantic value by explaining why includeHeaders=true matters and tying the ETag to downstream mutation operations, which is not fully captured by the parameter descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Retrieve the properties and relationships of a plannerBucket object.' The resource is specific enough to distinguish it from sibling tools that operate on plans or tasks, though it does not explicitly contrast itself with list-plan-buckets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides helpful context about using includeHeaders=true to obtain the @odata.etag for subsequent update/delete operations. However, it does not explicitly state when to use this single-bucket getter versus list-plan-buckets for enumeration, so the guidance is useful but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-planner-planget-planner-planCRead-only
Retrieve the properties and relationships of a plannerplan object.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| plannerPlanId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context—no mention of response size, pagination, ETags, or what 'relationships' entails. It provides minimal value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. However, 'plannerplan' lacks a space and the description could be more informative without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation, the schema and annotations cover safety and parameters, and the description states the object type. But it lacks guidance on selecting this tool over related planner tools and does not describe return value behavior beyond 'properties and relationships'. Adequate but incomplete for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed descriptions for all six parameters (expand, select, fetchAllPages, plannerPlanId, includeHeaders, excludeResponse). The tool description itself adds no parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve') and the resource ('a plannerplan object'). It is specific enough to identify the tool's purpose, though it does not explicitly distinguish it from sibling tools like get-planner-task or get-planner-bucket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus other planner retrieval tools. There is no mention of context, prerequisites, or alternatives, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-planner-taskget-planner-taskARead-only
Retrieve the properties and relationships of plannerTask object.
💡 TIP: Response includes @odata.etag — save it, required as If-Match header for update-planner-task. Use includeHeaders=true to capture it.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context about the @odata.etag and the need for includeHeaders=true, which is not visible in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with the actionable tip front-loaded. Every word earns its place, and there is no redundant restating of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, single-object getter with a fully documented schema, the description plus annotations are largely sufficient. The main gap is not clarifying the distinction from get-planner-task-details or the generic nature of the OData expand/select hints, but these are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description only adds functional context around includeHeaders and the ETag, without further enriching plannerTaskId, select, or expand beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Retrieve') and resource ('plannerTask object'), making the core purpose clear. It does not explicitly say 'by ID' or contrast itself with get-planner-task-details/list-planner-tasks, so it stops short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: a singular task fetch, with a tip that orients the agent toward a later update-planner-task call by preserving the ETag. No explicit when-to-use, when-not-to-use, or alternative guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-planner-task-detailsget-planner-task-detailsARead-only
Retrieve the properties and relationships of a plannerTaskDetails object.
💡 TIP: Response includes @odata.etag — required for update-planner-task-details. Use includeHeaders=true.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the readOnlyHint annotation: it reveals that the response includes @odata.etag and that includeHeaders=true controls whether headers are returned. This helps the agent understand a non-obvious aspect of the tool's output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the core purpose, second gives a focused, high-value tip. No wasted words, and the most actionable information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with comprehensive schema parameter descriptions and safe annotations, the description is complete. The tip about ETag and includeHeaders covers the main practical follow-up action (update-planner-task-details), and no other essential context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% with detailed parameter descriptions, meeting the baseline of 3. The description adds extra semantic value by linking includeHeaders=true to obtaining the ETag, which is a meaningful practical detail beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Retrieve') and the resource ('plannerTaskDetails object'), making the tool's purpose evident. It does not explicitly differentiate from sibling tools like get-planner-task, though the resource name itself provides sufficient distinction for many cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP provides clear context: when you need the @odata.etag for update-planner-task-details, call this tool and set includeHeaders=true. It does not give explicit exclusions or alternatives, but it gives actionable guidance for a common downstream use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-specific-calendar-eventget-specific-calendar-eventARead-only
Get a single event from one of the signed-in user's calendars, addressed by calendar ID and event ID. Any calendar can be addressed this way, including the default one.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive behavior, so the description does not need to restate that. It adds the useful scoping fact that the default calendar is also addressable, but it does not disclose error behavior or return shape. With annotations covering the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with verb and resource, with no filler. The second sentence earns its place by scoping the tool to any calendar, including the default one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with fully documented parameters and read-only annotations, the description plus schema is largely complete. The main gap is the absence of explicit guidance for choosing this over get-calendar-event or list-specific-calendar-events, and there is no output-shape note since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already has detailed documentation, so the baseline is 3. The tool description only repeats calendarId and eventId in prose and adds no new meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the operation ('Get a single event') and the resource scope ('one of the signed-in user's calendars'), and the addressing mechanism by calendar ID and event ID separates it from event-list tools. It does not explicitly contrast with the sibling tool get-calendar-event, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prose implies the right context: use this when you have both calendarId and eventId and need a single event. The second sentence clarifies that any calendar is addressable, including the default one, but no alternative tool is named and no when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-specific-calendar-viewget-specific-calendar-viewARead-only
List the occurrences, exceptions, and single instances of events over a time range, from one of the signed-in user's calendars addressed by calendar ID.
💡 TIP: Returns expanded recurring event instances (not just seriesMaster) within a date range for a specific calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Each instance includes seriesMasterId and type (occurrence/exception) fields for recurring event linkage. Use fetchAllPages=true to retrieve all results when there are many events. To find Teams meetings, use $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| endDateTime | Yes | The end date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00 | |
| fetchAllPages | No | 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. | |
| startDateTime | Yes | The start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00 | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotation, the description discloses meaningful behavioral quirks: recurring instances are expanded, type and seriesMasterId fields link instances, isOnlineMeeting cannot be filtered and returns 400 ErrorInvalidProperty, onlineMeetingProvider teamsForBusiness identifies Teams meetings, and the event resource has no joinWebUrl property. This is rich, non-obvious behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in one clear sentence, followed by organized TIP content. The Teams-meeting guidance is valuable but long and somewhat tangential to the tool's primary calendar-view purpose; a slightly tighter structure would improve scannability without losing key caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 17 parameters, no output schema, and read-only annotations, the description covers the important output semantics and failure modes well. It explains expanded instances, recurring-event linkage fields, Teams caveats, and pagination. Minor gaps include lack of a general description of the returned event resource shape and pagination metadata, but the schema covers the relevant parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by suggesting a concrete $select list for Teams meetings, explaining that Teams-related properties are not filterable, and showing how to pass the resulting joinUrl to a sibling tool. It does not systematically re-explain every parameter, which is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "List the occurrences, exceptions, and single instances of events over a time range" for a specific calendar addressed by calendar ID. It further clarifies it returns expanded recurring instances rather than series masters, which sharply distinguishes it from related calendar-listing siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states required usage conditions, including startDateTime and endDateTime in ISO 8601 format, and gives practical direction on fetchAllPages for many events. It also routes the agent to list-online-meetings for transcripts. However, it does not explicitly name alternative sibling tools or state when to choose this over get-calendar-view or list-calendar-event-instances.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-subscriptionget-subscriptionARead-only
Retrieve the properties and relationships of a subscription. See the table in the Permissions section for the list of resources that support subscribing to change notifications.
💡 TIP: Gets a specific webhook subscription by id. Use list-subscriptions to find the id. Returns full subscription details including resource, changeType, notificationUrl, expirationDateTime, applicationId.
| Name | Required | Description | Default |
|---|---|---|---|
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| subscriptionId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about return contents ('full subscription details including resource, changeType, notificationUrl, expirationDateTime, applicationId') but does not disclose additional behavioral traits such as auth requirements, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a practical tip. The permission reference adds context but is somewhat generic; overall no sentence is wasted, though the two purpose statements are slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter read operation with no output schema, the description covers how to identify the target, what will be returned, and where to find permission-relevant resources. It lacks detail on error cases or response shape beyond the listed fields, but it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions are already detailed, especially for subscriptionId, select, and fetchAllPages. The description does not add parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Retrieve the properties and relationships of a subscription') and immediately distinguishes itself from listing by stating 'Gets a specific webhook subscription by id.' This clearly separates it from sibling list-subscriptions without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent to list-subscriptions to find the id, which is a clear alternative and usage signal. It implies this tool is for retrieval when an id is already known, though it does not explicitly state when not to use it or mention the write-oriented sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-todo-taskget-todo-taskARead-only
Read the properties and relationships of a todoTask object.
💡 TIP: Returns a single To Do task. NOTE: $select is NOT supported — do not pass select parameter, Graph returns RequestBroker--ParseUri (400). Use $expand=linkedResources to include linked email/resource. Returns body content (HTML format), checklist items, and linked resources.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| todoTaskId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and destructiveHint, but the description adds valuable warnings: $select is NOT supported and will cause a 400 error, and it mentions what is returned (body content, checklist items, linked resources). This goes beyond annotation signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: first sentence states the core action, followed by a tip and a note. No fluff; every sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains what the tool returns (HTML body, checklist items, linked resources) and warns about the unsupported select. It covers the key facts needed to call the tool correctly. It doesn't mention pagination or edge cases, but for a single-task GET this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds critical semantics that contradicts the schema's own select parameter, disambiguating that select should not be passed/documented. It also clarifies how to use $expand to include linked resources, adding beyond field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('todoTask object'), and clarifies it returns a single To Do task, which distinguishes it from list operations like list-todo-tasks. The statement 'Returns a single To Do task' explicitly scopes the tool versus siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need a single task by ID, but it doesn't explicitly state when to prefer this over alternatives like list-todo-tasks. It offers a tip about $expand, which helps with how to use parameters but not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph-batchgraph-batchADestructive
Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order — match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...).
💡 TIP: Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order — match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description need not repeat that it can mutate. It adds valuable behavioral context beyond the annotations: responses are in arbitrary order and must be matched by id, and sub-request URLs are relative to the Graph root. The confirm gate is documented in the schema, so no gap there. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is duplicated verbatim (the same text appears twice in the description field), which is a clear structural flaw that wastes tokens and reflects poor quality control. Otherwise, the content is well-organized: purpose first, then body example, then use cases, then a critical note. But the duplication knocks the score down.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex meta-tool, the description is quite complete: it specifies the 20-request limit, the request/response structure, the use cases, and the URL relativity rule. It does not mention error handling or rate limits, but given the openWorldHint and lack of an output schema, the provided information covers the essential calling contract. One could argue the confirm gate is not mentioned, but it is in the schema. Overall, only minor gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the 'body' parameter (it is an empty object with additionalProperties true). The description fully compensates by giving a detailed example with id, method, url, headers, body, and dependsOn, including method enum and URL format. This is essential, as the body is the core parameter and without this example the tool would be unusable. The other three parameters are already described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Combine' and resource 'Graph requests into a single HTTP call', clearly distinguishing this meta-tool from the many sibling tools that each handle a single resource. It also includes the body format and response shape, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists three concrete use cases (parallelizing reads, sequencing writes via dependsOn, batching Excel writes), which effectively communicate when to use it. It also provides a crucial note about relative URLs, but does not explicitly state when NOT to use it (e.g., for a single request). This is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert-excel-rangeinsert-excel-rangeADestructive
Insert an Excel range.
💡 TIP: Insert blank cells at the given range, shifting existing content. Body: { shift: 'Down' } or { shift: 'Right' }. Use 'Down' to insert blank rows above existing data.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (destructiveHint: true), so the description does not need to reiterate that. It adds useful behavior details: inserts blank cells at the given range and shifts existing content. It does not mention side effects like formatting or undo, but given annotation coverage, it provides sufficient extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two sentences plus a tip. It is front-loaded with the main action and immediately provides the key parameter direction. There is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema and multiple path parameters, the description is lean but adequate. It explains the core effect and gives a tip for the shift parameter. It does not discuss response format, confirmation requirements, or error cases, but these are not critical given the schema and annotations. It could be slightly more thorough about what 'range' means in terms of the address parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all parameters with high coverage (88%). The description adds specific guidance for the 'shift' parameter by showing valid values ('Down' or 'Right') and their effect, which is not present in the schema. This enhances parameter understanding beyond the basic type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: inserting blank cells at the given range and shifting existing content. It distinguishes from siblings like delete-excel-range or clear-excel-range by explicitly describing the insertion-and-shift behavior. The verb 'insert' is specific, and the tip clarifies the exact effect, though it does not mention the address parameter explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one practical usage hint: using 'Down' to insert rows above existing data. However, it does not explain when to choose this tool over alternatives like delete-excel-range or clear-excel-range, nor does it mention any prerequisites or context. The guidance is minimal and focuses on the shift direction rather than overall usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-accountsARead-only
List all Microsoft accounts configured in this server. Use this to discover available account emails before making tool calls. Reflects accounts added mid-session via --login.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description adds the valuable context that the tool reflects accounts added mid-session via --login. This is meaningful dynamic behavior beyond what the schema or annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences: the first states the core function, the second states its primary purpose and a dynamic behavior. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with readOnlyHint, the description fully covers what the agent needs: what is listed, why to call it, and that it stays current with mid-session account additions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is correspondingly empty, so there is no parameter meaning to add. The description appropriately focuses on the result, which is the full set of configured account emails.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('List all Microsoft accounts configured in this server') and immediately distinguishes this from account-management siblings like login, logout, select-account, and remove-account. The intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this to discover available account emails before making tool calls.' This is clear context, though it does not name alternative tools or explicitly say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-all-onenote-sectionslist-all-onenote-sectionsARead-only
Retrieve a list of onenoteSection objects.
💡 TIP: Lists all sections across all notebooks. Use list-onenote-notebook-sections to list sections within a specific notebook instead.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context about the tool's scope (global across notebooks), which complements the annotations without redundancy or contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, with two short sentences that deliver the core action and critical disambiguation. No filler, and the tip is directly relevant. It maximizes information density in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and full schema parameter coverage, the description is complete. It clarifies scope and differentiation, and no output schema exists to worry about. Slight gap is that it doesn't mention return format or pagination, but these are standard Graph behaviors and not necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all parameters have descriptive text in the input schema. The tool description itself adds no extra parameter insights, so it correctly relies on the schema. Baseline of 3 is appropriate given full schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve a list of onenoteSection objects') and explicitly clarifies that it lists all sections across all notebooks, which differentiates it from sibling list-onenote-notebook-sections. This is unique and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip explicitly directs the agent to use list-onenote-notebook-sections when listing sections within a specific notebook, providing a clear when-to-use versus alternative. This leaves no ambiguity about the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-calendar-event-instanceslist-calendar-event-instancesARead-only
The occurrences of a recurring series, if the event is a series master. This property includes occurrences that are part of the recurrence pattern, and exceptions modified, but doesn't include occurrences canceled from the series. Navigation property. Read-only. Nullable.
💡 TIP: Expand a recurring event into individual instances within a date range. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use this to see all occurrences of a recurring event.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| endDateTime | Yes | The end date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T20:00:00-08:00 | |
| fetchAllPages | No | 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. | |
| startDateTime | Yes | The start date and time of the time range, represented in ISO 8601 format. For example, 2019-11-08T19:00:00-08:00 | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool is read-only, nullable, and navigation-property backed, and specifies which occurrences are included (recurrence pattern, modified exceptions) and excluded (canceled occurrences). These details go beyond the annotations' readOnly/non-destructive hints, so the agent understands exactly what data it will see.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a definition paragraph and a tip, and the tip front-loads the practical usage. Some phrases such as 'Navigation property' are redundant, but overall each sentence adds useful context and it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with an extensively documented schema, the description covers the core behavioral caveats (series master only, canceled occurrences excluded) and usage context. It does not describe response shape, but since no output schema exists and the tool returns a list of occurrences, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Because the input schema already documents all 18 parameters with full descriptions, the description adds only the reminder that startDateTime and endDateTime are required and the format example. This is a useful reinforcement but not new semantic information, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact operation—expanding a recurring event into individual instances within a date range—and clarifies it applies only to series masters. This differentiates it from sibling tools that list or retrieve single calendar events, even though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip explicitly tells when to use the tool: to see all occurrences of a recurring event within a date range, and identifies the two mandatory query parameters. It does not mention exclusions or compare against sibling tools, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-calendar-eventslist-calendar-eventsARead-only
Get a list of event objects in the user's mailbox. The list contains single instance meetings and series masters. To get expanded event instances, you can get the calendar view, or get the instances of an event. Currently, this operation returns event bodies in only HTML format. There are two scenarios where an app can get events in another user's calendar:
💡 TIP: WARNING: Does NOT expand recurring events — only returns seriesMaster. Use get-calendar-view instead to see individual occurrences within a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable behavioral details beyond the readOnlyHint/destructiveHint annotations: recurring events are not expanded (only seriesMaster is returned), event bodies are only in HTML format, and it points to alternatives for expanded instances. These are non-obvious traits that materially affect how an agent interprets the results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description contains a dangling sentence ('There are two scenarios where an app can get events in another user's calendar:') that is never completed, and the warning is awkwardly formatted with emoji and mixed tip/warning labels. While the core information is valuable, the structure is messy and not every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral distinction (seriesMaster vs expanded instances) and points to the relevant alternative, but the incomplete 'two scenarios' section leaves a gap about accessing another user's calendar. With 14 parameters and no output schema, the description provides a reasonable but not fully complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 14 parameters are already documented with rich details in the input schema. The tool description does not add any extra parameter-specific meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a list of event objects in the user's mailbox') and immediately distinguishes itself from related tools by noting it returns series masters and single instances, and explicitly flags that it does not expand recurring events. This makes it easy to separate from get-calendar-view and list-calendar-event-instances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when not to use this tool: it does not expand recurring events, and directs to get-calendar-view for individual occurrences within a date range. However, the mention of 'two scenarios where an app can get events in another user's calendar' is cut off and never explained, leaving some usage context incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-calendar-events-deltalist-calendar-events-deltaARead-only
Get a set of event resources that have been added, deleted, or updated in a calendarView (a range of events defined by start and end dates) of the user's primary calendar. Typically, synchronizing events in a calendarView in a local store entails a round of multiple delta function calls. The initial call is a full synchronization, and every subsequent delta call in the same round gets the incremental changes (additions, deletions, or updates). This allows you to maintain and synchronize a local store of events in the specified calendarView, without having to fetch all the events of that calendar from the server every time.
💡 TIP: Incremental sync of events across the default calendar. First call returns all events plus @odata.deltaLink. Subsequent calls with that link return only additions/updates/removals. Use $select to limit fields. Deltas expire after ~30 days — start over if the server returns 410 Gone. For a time-bounded view with delta semantics, use list-calendar-view-delta instead.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| endDateTime | Yes | 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 | |
| fetchAllPages | No | 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. | |
| startDateTime | Yes | 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 | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral details beyond the annotations: the first call returns all events plus @odata.deltaLink, subsequent calls return only changes, delta links expire after ~30 days, and a 410 Gone means restarting. It also advises using $select to limit fields, which is valuable operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear definition and includes a well-structured tip with the most actionable guidance. However, the first paragraph repeats some of the tip's content about full sync versus incremental calls, so it could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the delta lifecycle, expiry, error handling, and a sibling alternative, which is substantial for a complex tool. The main gap is that no schema parameter is explicitly identified for passing the returned @odata.deltaLink on subsequent calls, even though the tip instructs agents to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 13 parameters. The description adds useful context about startDateTime and endDateTime defining the calendarView range and suggests using $select, but it does not systematically enrich parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a set of event resources that have been added, deleted, or updated in a calendarView... of the user's primary calendar.' It clearly explains delta semantics and distinguishes the tool from list-calendar-view-delta in the tip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when to use the tool: synchronizing a local event store with an initial full sync followed by incremental delta calls. It explicitly names an alternative, list-calendar-view-delta, for time-bounded views with delta semantics, though it does not mention every sibling alternative such as list-calendar-events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-calendarslist-calendarsBRead-only
Get all the user's calendars (/calendars navigation property), get the calendars from the default calendar group or from a specific calendar group.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered. The description adds only the endpoint/scope context; it does not describe pagination, default group behavior, or how a specific calendar group is selected. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource being listed. The phrasing repeats 'get the calendars' and is slightly awkward, but there is no filler or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple read-only listing tool: the resource is named and the annotations plus rich parameter schema cover safety and querying. The notable gaps are the absence of usage guidance and no documented way to target the 'specific calendar group' variant mentioned in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each query parameter has a rich description, so the schema carries the parameter semantics. The description's mention of a 'specific calendar group' suggests a capability that is not represented by any documented parameter, but because the schema's generic OData parameters are already well explained, it stays at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise resource ('the user's calendars') and identifies the Graph navigation property, so an agent can tell this lists calendar objects rather than events or messages. It is slightly less clear as a standalone purpose because it bundles two endpoint variants in one sentence, but it is not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit 'use this when...' guidance, no exclusions, and no pointer to the relevant sibling tools (e.g., list-calendar-events or get-calendar-view). The correct context is only implied by the resource name, which is insufficient given the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-calendar-view-deltalist-calendar-view-deltaARead-only
Get a set of event resources that have been added, deleted, or updated in a calendarView (a range of events defined by start and end dates) of the user's primary calendar. Typically, synchronizing events in a calendarView in a local store entails a round of multiple delta function calls. The initial call is a full synchronization, and every subsequent delta call in the same round gets the incremental changes (additions, deletions, or updates). This allows you to maintain and synchronize a local store of events in the specified calendarView, without having to fetch all the events of that calendar from the server every time.
💡 TIP: Incremental sync of events within a time window. Required query params on first call: startDateTime, endDateTime (ISO 8601). Returns events in the window plus @odata.deltaLink; subsequent calls with that link return only changes. Expands recurring events to individual occurrences (unlike list-calendar-events-delta which returns the series master). Use this for calendar UIs showing a week/month view.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| endDateTime | Yes | 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 | |
| fetchAllPages | No | 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. | |
| startDateTime | Yes | 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 | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive behavior, and the description adds significant behavioral detail beyond that: recurrence expansion, the full-then-incremental sync pattern, required first-call parameters, and the returned @odata.deltaLink. This gives the agent a clear model of how the tool behaves across multiple calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative and reasonably structured, front-loading the core purpose and then supplying operational detail. It has some redundancy around the initial-full/subsequent-incremental sync concept, but the added tip earns its place by clarifying required parameters and recurrence behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex delta-sync tool with no output schema, the description covers the lifecycle, required parameters, recurrence expansion, and the distinguishing delta link behavior. The main gap is that the input schema does not expose an explicit delta-token parameter, and the description does not explain exactly how a caller supplies the returned delta link on subsequent calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context for startDateTime and endDateTime as required first-call parameters and explains how deltaLink-driven subsequent calls differ from the initial call, which goes beyond the generic schema descriptions. It does not detail how to pass the delta link as a parameter, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving added, deleted, or updated event resources within a calendarView on the user's primary calendar. It also distinguishes itself from the direct sibling list-calendar-events-delta by noting the recurring-event expansion behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the delta-sync workflow: initial full sync then incremental calls with the delta link. It explicitly names list-calendar-events-delta as the alternative and gives a concrete use case ('calendar UIs showing a week/month view'), making selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-contact-folder-child-folderslist-contact-folder-child-foldersARead-only
Get a collection of child folders under the specified contact folder.
💡 TIP: Lists immediate sub-folders under a given contact folder. Returns id, displayName, parentFolderId. Use list-contact-folders to discover top-level folders, then this tool to traverse one level deeper. Supports $filter, $top, $orderby. Note: contact folders are typically a flat list in Outlook clients, but Graph allows nesting via this endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| contactFolderId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnlyHint and non-destructive behavior. The description adds useful behavioral context beyond that: it returns only immediate children, lists the expected fields (id, displayName, parentFolderId), and notes that Graph supports nesting even though Outlook clients usually show a flat list. It does not address pagination behavior, but the parameter docs cover nextLink and fetchAllPages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the TIP/note provide useful orientation. The opening sentence and the TIP restate essentially the same operation, so there is minor redundancy that prevents a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool, the description covers return fields, traversal depth, and the nesting caveat, while the schema fully documents all 13 parameters. Since there is no output schema and the tool has many parameters, a short example of chaining list-contact-folders to this tool would make it even more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies; every parameter already has detailed semantics in the schema. The description adds only a high-level mention of $filter/$top/$orderby and the list-contact-folders workflow, which does not materially extend the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement ('Get a collection of child folders under the specified contact folder') and reinforces it with 'Lists immediate sub-folders under a given contact folder.' It explicitly contrasts this with list-contact-folders for top-level discovery, so the tool is distinguishable from its nearest sibling without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit workflow: use list-contact-folders to find top-level folders, then this tool to traverse one level deeper. It also cautions that contact folders are typically flat in Outlook, which implicitly tells an agent when child-folder traversal may not be needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-contact-folder-contactslist-contact-folder-contactsARead-only
Get a contact collection from the default Contacts folder of the signed-in user (.../me/contacts), or from the specified contact folder.
💡 TIP: Lists contacts inside a specific folder. Pair with list-contact-folders to discover the folder id. Note: the existing list-outlook-contacts (GET /me/contacts) only returns contacts from the default folder — use this tool to read contacts from any folder. Supports $filter, $search='query', $orderby, $top, $select.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| contactFolderId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavior context: it reads from the default or specified folder, supports OData query options, and is the correct replacement for list-outlook-contacts when non-default folders are needed. It does not discuss response shape or errors, but for a read-only list tool this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the operation. Every sentence earns its place: primary behavior, folder-id discovery tip, and sibling differentiation. No filler or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, this read-only list operation is fully specified: the required contactFolderId, how to discover it, the supported OData controls, and the difference from the default-folder sibling are all covered by the description plus the detailed schema. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the input schema already provides rich descriptions for all 13 parameters, including contactFolderId path semantics, pagination via skiptoken, and fetchAllPages warnings. The description adds only a high-level mention of supported query options and folder discovery, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a contact collection' from the default Contacts folder or a specified contact folder. It also explicitly differentiates from sibling list-outlook-contacts by noting that sibling only returns the default folder, so the agent can distinguish them immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: 'use this tool to read contacts from any folder.' It also names the alternative for the default-folder case and instructs pairing with list-contact-folders to discover the folder id, covering the key prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-contact-folderslist-contact-foldersARead-only
Get the contact folder collection in the default Contacts folder of the signed-in user.
💡 TIP: Lists the user's Outlook contact folders (the named buckets that organize contacts). Always includes the built-in 'Contacts' folder; user-created folders also appear. Returns id, displayName, and parentFolderId. To identify the default folder, match displayName === 'Contacts'. Use this before list-contact-folder-contacts or create-contact-in-folder to discover folder ids. Supports OData query parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, and the description adds that it always includes the built-in 'Contacts' folder, user-created folders, and returns id, displayName, parentFolderId. It also notes OData support, providing behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear opening sentence and a focused TIP paragraph. Every sentence adds value, front-loading the purpose and then providing usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool returns, how to use it, and its role in the workflow. It doesn't have an output schema, but it states the returned fields. It's sufficient for a list tool with well-documented parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description only generically mentions OData support, adding no specific parameter semantics beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: it gets the contact folder collection for the signed-in user, and the TIP clarifies it lists folders with specific fields. It distinguishes from sibling tools like list-contact-folder-contacts by noting it should be used first to discover folder IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool before list-contact-folder-contacts or create-contact-in-folder, and provides guidance on identifying the default folder. This gives clear when-to-use and alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-drive-item-permissionslist-drive-item-permissionsBRead-only
The set of permissions for the item. Read-only. Nullable.
💡 TIP: Lists all permissions (sharing links, direct access, inherited) on a file or folder. Each permission has roles, grantedTo (user), link (sharing URL), and inheritedFrom.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description confirms 'Read-only.' It adds context about the types of permissions (sharing links, direct access, inherited) and fields. However, it does not disclose behavior like pagination defaults, response size implications, or handling of large permission sets, which would be useful for an 14-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but the first sentence is a near-property definition with no actionable verb, and the tip—while useful—is appended as a separate, unlabeled note. The structure is not meaningfully front-loaded; the most informative part (the tip) comes second. It is concise but not optimally organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, 2 required, and no output schema, the description is adequate for a simple list operation but does not equip the agent with return format expectations, preconditions (e.g., item existence), or edge-case guidance. The schema explains parameters well, and the tip clarifies the domain, but the overall description does not fully compensate for the lack of an output schema or behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all parameters. The tool description adds no parameter-specific semantics beyond mentioning that permissions include roles, grantedTo, link, and inheritedFrom, which loosely maps to potential $select fields but does not clarify parameter usage. Baseline 3 is appropriate since the schema carries the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tip clearly states the tool's purpose with a specific verb ('Lists all permissions') and resource ('file or folder'), differentiating it from permission-management siblings like delete-drive-item-permission and share-drive-item. However, the first sentence 'The set of permissions for the item. Read-only. Nullable.' is a redundant property-style statement that adds no action clarity and slightly muddies the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what it lists but gives no explicit guidance on when to choose this tool over alternatives (e.g., when needing to create a share link or delete a permission). It does not state exclusions or conditions. The tip implies a general listing context but lacks comparative direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-drive-item-thumbnailslist-drive-item-thumbnailsARead-only
Collection of thumbnailSet objects associated with the item. For more information, see getting thumbnails. Read-only. Nullable.
💡 TIP: Lists thumbnail sets for a file. Each set contains small (96px), medium (176px), large (800px) thumbnails with url and dimensions. Returns empty for unsupported types (text docs). Use $select=small,medium,large or $expand=small($select=url) to fetch specific sizes. The returned URLs are short-lived — fetch the bytes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and non-destructive; the description adds genuinely useful behavioral context: thumbnails come in 96px/176px/800px sizes, unsupported file types return empty results, and returned URLs are short-lived so bytes must be fetched immediately. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably compact and information-dense, covering purpose, sizes, empty results, and URL lifetime. The first sentence is Graph-metadata-like and not action-oriented, and the doc link adds limited value, but the overall structure is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the return shape (thumbnailSet objects with small/medium/large, url, dimensions) and edge cases (empty for text docs). Required path parameters and pagination options are covered thoroughly by the input schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful parameter-level guidance beyond the schema: which $select values fetch which sizes and how to use $expand on thumbnail properties. This helps an agent choose the right values rather than merely knowing the parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action—'Lists thumbnail sets for a file'—and the specific resource (thumbnailSet objects for a drive item). It is unambiguous against sibling tools like list-drive-item-permissions, list-drive-item-versions, and get-drive-item by naming the exact domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical guidance on how to call it: use $select=small,medium,large or $expand=small($select=url), and notes that unsupported types return empty. It does not name an alternative tool, but the strong thumbnail-specific usage guidance makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-drive-item-versionslist-drive-item-versionsBRead-only
The list of previous versions of the item. For more info, see getting previous versions. Read-only. Nullable.
💡 TIP: Lists version history of a file. Each version has id, lastModifiedDateTime, lastModifiedBy, and size. Use the version id with /versions/{id}/content to download a specific version.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only.' It adds useful behavioral context: the response may be Nullable, each version exposes specific fields, and the version id can be reused to download content. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The tip is useful and compact, but the opening fragment 'The list of previous versions of the item' is redundant with the tip and reads awkwardly. 'For more info, see getting previous versions' adds little substance. Overall it is short, but the structure is not tight and contains some repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description reasonably covers return fields and a follow-up action for downloading specific versions. Required parameters are documented in the schema, and the read-only nature is clear. It does not explicitly describe pagination or ordering behavior, but those are addressed through top, skiptoken, and orderby parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 14 parameters are already well documented. The description does not add parameter-level meaning beyond the schema, though it references version id as a downstream value. Baseline 3 is appropriate given the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource ('previous versions of the item') and action ('Lists version history'), and the tip clarifies it returns version metadata. It is clearly distinct from sibling tools like list-drive-item-permissions and list-drive-item-thumbnails, though it never names them explicitly. The opening sentence is awkwardly phrased, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool over alternatives, nor any mention of exclusions or related tools. The tip only explains what happens after listing—using the version id with /versions/{id}/content—not when to invoke this tool. The implied usage is limited to 'if you need version history.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-driveslist-drivesBRead-only
Retrieve the list of Drive resources available for a target User, Group, or Site.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, non-destructive operation, so the description need not restate that. It adds a small contextual detail by specifying the target scope (User, Group, or Site), but it does not disclose pagination behavior, response shape, or permission requirements, which are left to the parameter schema. This is adequate but minimal given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the operation and scope without filler. It is appropriately concise given the schema's richness and the annotations. It earns its place, though it could be slightly more informative about what 'Drive resources' entails.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 12 parameters and no output schema, yet the description only covers the basic purpose and target scope. The extensive parameter descriptions and read-only annotations compensate for much of the missing context, so it is workable. However, an agent would need to dig into the schema to understand pagination and response behavior, so the description is not fully complete on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description need not explain parameters. The one-line description adds no parameter-specific meaning and does not clarify how the target User/Group/Site is specified. The rich parameter descriptions in the schema carry the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation — retrieving a list of Drive resources — and narrows the scope to a target User, Group, or Site, which distinguishes it from item-level drive tools like list-folder-files or get-drive-item. The verb 'Retrieve' and resource 'Drive resources' make the primary function clear, though it does not explicitly name sibling alternatives or clarify that these are top-level containers rather than items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool over alternatives. It does not mention exclusions, prerequisites, or point to sibling tools such as get-drive-root-item or search-onedrive-files. An agent must infer when to choose this tool solely from the name and the target-scope wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-excel-table-rowslist-excel-table-rowsARead-only
The list of all the rows in the table. Read-only.
💡 TIP: Lists all rows in a table. Each row has index and values (array of cell values). Use $top and $skip for pagination on large tables.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookTableId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description repeats 'Read-only' without adding new behavioral boundaries. It does add useful context that rows contain index and values arrays, which is return-format information rather than side-effect disclosure. Given annotation coverage, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose and read-only status. However, the first sentence ('The list of all the rows in the table') is redundant with the tip ('Lists all rows in a table'), so not every sentence earns its place. The pagination tip is valuable and adds no fluff, so overall conciseness is good but not flawless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 15 parameters and no output schema, the description gives just enough context: it clarifies the row structure and mentions pagination, which are key to calling correctly. The rich parameter descriptions in the schema fill in the rest, and annotations cover the safety profile. It could mention response pagination links or required path parameters, but those are documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions for all 15 parameters including top, skip, filter, and select. The description does not add parameter-level semantics beyond what the schema already provides; it only reiterates pagination advice. Baseline 3 is appropriate because the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: lists rows in an Excel table, and explicitly labels the operation as read-only. This distinguishes it from sibling mutation tools like add-excel-table-rows, update-excel-table-row, and delete-excel-table-row. The mention of row structure ('index and values') further clarifies the return content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage tip for pagination on large tables ($top and $skip), which guides when to apply those parameters. However, it does not explicitly name alternatives or exclusions (e.g., when to use list-excel-tables or get-excel-table). The read-only label implies it is safe for reading but does not provide comparative routing to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-excel-tableslist-excel-tablesARead-only
Represents a collection of tables associated with the workbook. Read-only.
💡 TIP: Lists all named tables in a workbook. Each table has id, name, showHeaders, showTotals, columns, and style. Use the table name or id with other table endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces "Read-only." Beyond the annotations, it discloses the returned table shape (id, name, showHeaders, showTotals, columns, style), which is valuable since there is no output schema. This adds behavioral context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The overall description is short, and the tip is useful. However, the opening sentence "Represents a collection of tables associated with the workbook" is redundant with the clearer "Lists all named tables in a workbook," and "Read-only" duplicates the annotation. Not every sentence earns its place, so it is not a top-tier concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the description plus annotations and fully documented schema are sufficient for an agent to decide and invoke the tool. It names the output fields, notes the read-only nature, and points to follow-up table endpoints. A small gap is that it does not mention the standard paginated value-list response shape, but the parameter descriptions for top, skiptoken, and fetchAllPages already cover related behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 14 parameters, including required driveId and driveItemId. The description does not add parameter-level meaning beyond the schema, but because the schema is fully descriptive, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource and action: "Lists all named tables in a workbook." It also describes the returned table fields, which reinforces what the tool does. However, it does not explicitly distinguish itself from siblings like get-excel-table or list-excel-table-rows, so it falls just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip implies when to use this tool: when you need an inventory of named tables in a workbook. It also gives a follow-up hint to use the table name or id with other table endpoints. It does not explicitly state when not to use it or name an alternative tool, so guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-excel-worksheetslist-excel-worksheetsDRead-only
Represents a collection of worksheets associated with the workbook. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only,' which merely repeats the readOnlyHint annotation. It provides no additional behavioral context, such as whether pagination is automatic, what the response shape is, or how the tool handles large workbooks. No extra transparency is added beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but brevity here is under-specification rather than efficiency. The sentence 'Represents a collection of worksheets associated with the workbook' is largely redundant with the tool name)Skip the intro. and 'Read-only' duplicates the annotation. No useful content earns its place, so the minimal length is not a virtue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters and no output schema, the description is severely incomplete. It does not explain what the tool returns, how to identify the target workbook, or any caveats about worksheet listing. Sibling tools offer similar collection-list operations, and the absence of any clarifying detail makes the definition wholly inadequate for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, including detailed guidance for top, skip, count, expand, filter, search, select, and fetchAllPages. The tool description itself adds no parameter semantics, but the schema does the heavy lifting, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as list-excel-tables or get-excel-range. There is no mention of prerequisites, compatibility with other parameters, or any scenario that would favor this tool. The description is entirely silent on usage context, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-focused-inbox-overrideslist-focused-inbox-overridesARead-only
Get the overrides that a user has set up to always classify messages from certain senders in specific ways. Each override corresponds to an SMTP address of a sender. Initially, a user doesn't have any overrides.
💡 TIP: Lists Focused Inbox classification overrides — explicit rules that force messages from a given sender (by SMTP address) into either the Focused or Other tab, regardless of what the Outlook ML classifier would predict. Each override has id, classifyAs ('focused' or 'other'), and senderEmailAddress {name, address}. Returns an empty collection if the user has never set an override.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description adds value by explaining the response shape (id, classifyAs, senderEmailAddress) and the empty-collection behavior when no overrides exist. It also clarifies that overrides are explicit rules overriding the ML classifier. This goes meaningfully beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly redundant—'Initially, a user doesn't have any overrides' and 'Returns an empty collection if the user has never set an override' say nearly the same thing. But it is front-loaded with the core purpose, and the additional explanation of what an override is earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description explains the return fields and empty behavior, which is enough for an agent to interpret results. The pagination query parameters are already well documented in the schemaholistically, so the description doesn't need to repeat them. Minor gap: it doesn't explicitly state that this operates on the signed-in user's mailbox, though 'a user' implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all 12 parameters with detailed explanations, so the description does not need to compensate. The description itself provides only domain context (SMTP addresses), not parameter-level insight, but the schema fully covers the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('overrides that a user has set up to always classify messages from certain senders'), and distinguishes it from create/update/delete siblings. It also gives concrete details about what each override contains and the initial empty state, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies a read-only listing use case, and the sibling tools for creating/updating/deleting overrides are visible in the context. However, it never explicitly states when to use this tool versus the mutation siblings, nor does it give exclusions or conditions for choosing alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-folder-fileslist-folder-filesARead-only
Return a collection of DriveItems in the children relationship of a DriveItem. DriveItems with a non-null folder or package facet can have one or more child DriveItems.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile with readOnlyHint=true and destructiveHint=false, lowering the description's burden. The description adds useful context about the folder/package prerequisite but does not disclose pagination defaults, result-page behavior, or what happens for non-folder items.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the operation front-loaded in the first sentence and no filler. The second sentence earns its place by explaining the facet condition that governs whether children exist.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 100%-covered parameter schema and read-only annotations, the description is nearly sufficient: it names the resource and the prerequisite. It does not spell out pagination or recursive behavior, but the top/skip/fetchAllPages parameters already document those aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it explains that the target driveItemId must identify an item with a folder/package facet to have children. This is a meaningful semantic constraint not present in the driveItemId parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: returning DriveItems in the children relationship of a DriveItem, which clearly separates this from siblings like get-drive-item or list-drive-item-versions. The second sentence adds precision by tying child items to DriveItems with a folder or package facet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use by noting that only DriveItems with a non-null folder/package facet can have child DriveItems, so an agent can infer driveItemId must point to such an item. It does not explicitly name alternatives or state when not to use this tool, leaving some selection judgment to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-attachmentslist-mail-attachmentsARead-only
Retrieve a list of attachment objects.
💡 TIP: Lists attachments on a message: id, name, contentType, size, isInline. To download the bytes, call download-bytes with target=/me/messages/{message-id}/attachments/{attachment-id}/$value (the /$value suffix returns raw bytes; the bare attachment URL embeds contentBytes in JSON which can truncate large files).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, the description adds valuable behavioral context: the returned fields (id, name, contentType, size, isInline), the difference between the /$value suffix and the bare attachment URL, and the warning that bare URLs can truncate large files. This is genuinely useful operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and every sentence earns its place. The TIP is terse while conveying both output fields and a critical download caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by listing the returned attachment fields and explaining how to safely download the actual bytes. Combined with the fully-documented parameters and readOnly annotations, an agent has nearly everything needed to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description does not add parameter-level meaning beyond the schema; the download path example is helpful but not parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Retrieve a list of attachment objects.' The TIP clarifies the scope by noting it 'Lists attachments on a message,' but it does not explicitly differentiate from sibling tools beyond the inherent naming. Clear enough, though not maximally distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP gives clear context for the tool's role—listing attachment metadata—and explicitly routes byte-downloading to 'download-bytes' with a concrete target path. It does not enumerate exclusions or compare against sibling listing tools, but the main alternative use case is covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-child-folderslist-mail-child-foldersARead-only
Get the folder collection under the specified folder. You can use the .../me/mailFolders shortcut to get the top-level folder collection and navigate to another folder. By default, this operation doesn't return hidden folders. Use a query parameter includeHiddenFolders to include them in the response.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| mailFolderId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| includeHiddenFolders | No | Include Hidden Folders |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses a non-obvious default behavior: hidden folders are excluded unless includeHiddenFolders is passed. This is useful behavioral context that the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the core operation first, a helpful top-level navigation hint second, and the hidden-folder caveat last. Every sentence adds information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only folder-listing tool, the description plus rich schema and annotations cover the essential behavior: what it lists, under what folder, and the hidden-folder default. With no output schema, naming the result as a folder collection provides minimal return-type context; only explicit sibling comparison is mildly missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the detailed parameter descriptions already carry most semantics. The description adds only a mention of includeHiddenFolders, which matches the parameter but does not elaborate on how to use it beyond what the schema already says. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: get the folder collection under the specified folder. It distinguishes itself from the top-level list-mail-folders sibling by referencing the /me/mailFolders shortcut for top-level access and this operation for folders under a specified folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: for child folders below an existing folder, with top-level folders available through the /me/mailFolders shortcut. It does not explicitly name list-mail-folders or state when not to use the tool, but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-folder-messageslist-mail-folder-messagesARead-only
Get all the messages in the specified user's mailbox, or those messages in a specified folder in the mailbox.
💡 TIP: List read search Outlook emails within a specific mail folder. CRITICAL: When searching emails, the $search parameter value MUST be wrapped in double quotes. Format: $search="your search query here". Use KQL (Keyword Query Language) syntax to search specific properties: 'from:', 'subject:', 'body:', 'to:', 'cc:', 'bcc:', 'attachment:', 'hasAttachments:', 'importance:', 'received:', 'sent:'. Examples: $search="from:john@example.com" | $search="subject:meeting AND hasAttachments:true" | $search="body:urgent AND received>=2024-01-01" | $search="from:alice AND importance:high". Remember: ALWAYS wrap the entire search expression in double quotes! Reference: https://learn.microsoft.com/en-us/graph/search-query-parameter IMPORTANT: Always use $select to limit returned fields and reduce response size. Recommended default: $select=id,subject,from,toRecipients,receivedDateTime,bodyPreview,isRead,hasAttachments. Use bodyPreview instead of body for listings. To read the full email body, use get-mail-message with the specific message id.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| mailFolderId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral constraints beyond annotations: mandatory double-quoting of KQL search expressions, the need for $select to reduce payload size, and the tradeoff to use bodyPreview instead of body. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then helpful usage guidance, but it is somewhat verbose and repetitive. The double-quoting rule is emphasized three times, and the TIP sentence partly restates the opening purpose. Still, the KQL examples and $select guidance earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 13-parameter schema with 100% coverage and read-only annotations, the description is largely complete. It covers search syntax, field selection, and the relationship to get-mail-message for full bodies. It does not explain pagination or the difference from list-mail-messages, but those are partially covered by the schema and tool naming.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra value beyond the schema by giving concrete KQL examples, a recommended $select default, and explicit search-quoting reminders. It does not fully compensate for all 13 parameters, but the schema already documents them thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get all the messages in the specified user's mailbox, or those messages in a specified folder in the mailbox.' This is specific and understandable. However, it does not explicitly distinguish this tool from the sibling list-mail-messages, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: searching with KQL, wrapping $search in double quotes, using $select, and preferring bodyPreview. It also explicitly routes full-body reads to get-mail-message. It does not, however, contrast this tool with list-mail-messages or list-mail-folder-messages-delta, so exclusions are incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-folder-messages-deltalist-mail-folder-messages-deltaARead-only
Get a set of messages added, deleted, or updated in a specified folder. A delta function call for messages in a folder is similar to a GET request, except that by appropriately applying state tokens in one or more of these calls, you can query for incremental changes in the messages in that folder. It allows you to maintain and synchronize a local store of a user's messages without having to fetch the entire set of messages from the server every time.
💡 TIP: Incremental sync of messages within a mail folder. Graph only supports delta scoped to a folder — use mailFolder-id = 'inbox' for the well-known inbox, or another folder id from list-mail-folders. First call returns all messages plus @odata.deltaLink; subsequent calls with that link return only changes (created/updated/deleted). @odata.nextLink paginates within a single delta window. Deltas expire after ~30 days of inactivity — start over if the server returns 410. Prefer this over full re-list for polling.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| changeType | No | A custom query option to filter the delta response based on the type of change. Supported values are created, updated or deleted. | |
| mailFolderId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only/non-destructive. The description adds behavioral details beyond annotations: delta links expire after ~30 days of inactivity, a 410 response means to start over, @odata.nextLink paginates within a window, and the first call returns all messages plus a deltaLink. This gives the agent operational expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but well-structured: a formal paragraph explaining the delta concept, followed by a TIP block with operational details. No sentence is superfluous; all content is relevant to calling the tool correctly. It could be slightly trimmed, but the front-loaded intent and structured TIP keep it clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 14 parameters and no output schema, the description covers everything an agent needs: the delta token flow, pagination via nextLink, expiration handling, and practical folder selection. The schema already documents each parameter, so the only missing piece would be response format, but the description explains the key response fields (deltaLink, nextLink) and the tool's read-only nature. Complete for its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with detailed descriptions, so the baseline is 3. The description's TIP adds practical value by suggesting `mailFolderId = 'inbox'` as a well-known value and referencing list-mail-folders for discovering folder IDs, which goes beyond the schema's statement that the ID should come from a Graph object. This extra guidance earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb phrase 'Get a set of messages added, deleted, or updated in a specified folder' and explains the delta-increment concept. It distinguishes itself from a plain GET by specifying that it returns changes only when state tokens are applied, which differentiates it from siblings like list-mail-folder-messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The TIP section explicitly says 'Prefer this over full re-list for polling,' naming the alternative behavior. It also states Graph only supports delta scoped to a folder, constraining when this tool is appropriate versus a folder-less delta or a full message list. First-call vs subsequent-call behavior is described, so the agent knows when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-folderslist-mail-foldersARead-only
Get the mail folder collection directly under the root folder of the signed-in user. The returned collection includes any mail search folders directly under the root. By default, this operation doesn't return hidden folders. Use a query parameter includeHiddenFolders to include them in the response. This operation doesn't return all mail folders in a mailbox, only the child folders of the root folder. To return all mail folders in a mailbox, each child folder must be traversed separately.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| includeHiddenFolders | No | Include Hidden Folders |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate safety. It adds useful behavioral details: includes search folders, hidden folders excluded by default but can be included via parameter, and explains the limitation of only returning root-level children. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a purpose. It is front-loaded with the primary action, then adds scope details and a usage hint. No redundant information; efficiently communicates the tool's behavior and limitations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read-only list operation with all parameters documented in the schema. The description explains what is returned (child folders of root, including search folders) and clarifies it does not return all folders. Since there is no output schema, this level of detail is sufficient for an agent to call it correctly, though it doesn't mention pagination (left to schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well documented. The description adds extra meaning for includeHiddenFolders by explaining the default behavior and how to override it. However, other parameters are not elaborated beyond schema, so it only marginally enhances parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Get the mail folder collection directly under the root folder of the signed-in user.' It specifies the resource, scope, and distinguishes from listing all folders by noting it only returns child folders of the root. This differentiates it from siblings like list-mail-child-folders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear scope: does not return all folders and each child must be traversed separately, which implies when to use this tool. However, it does not explicitly name alternative tools or give explicit 'when not to use' conditions, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-messageslist-mail-messagesARead-only
List, search, and filter Outlook email messages in the signed-in user's mailbox across all folders. Returns message metadata (subject, from, receivedDateTime, isRead, hasAttachments) plus a body preview. Use $search for keyword queries, $filter to narrow by sender/read state/date, $top to limit page size, and $select to trim fields.
💡 TIP: List read search my Outlook emails across folders. CRITICAL: When searching emails, the $search parameter value MUST be wrapped in double quotes. Format: $search="your search query here". Use KQL (Keyword Query Language) syntax to search specific properties: 'from:', 'subject:', 'body:', 'to:', 'cc:', 'bcc:', 'attachment:', 'hasAttachments:', 'importance:', 'received:', 'sent:'. Examples: $search="from:john@example.com" | $search="subject:meeting AND hasAttachments:true" | $search="body:urgent AND received>=2024-01-01" | $search="from:john AND importance:high". Remember: ALWAYS wrap the entire search expression in double quotes! Reference: https://learn.microsoft.com/en-us/graph/search-query-parameter IMPORTANT: Always use $select to limit returned fields and reduce response size. Recommended default: $select=id,subject,from,toRecipients,receivedDateTime,bodyPreview,isRead,hasAttachments. Use bodyPreview instead of body for listings. To read the full email body, use get-mail-message with the specific message id.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| includeHiddenMessages | No | Include Hidden Messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive, and the description adds relevant behavior beyond them: it lists messages across all folders, returns only metadata plus a body preview, and recommends bodyPreview over body. It also discloses the KQL quoting requirement, which materially affects behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded: the core purpose and result shape appear first, followed by parameter strategy and critical syntax. The repeated emphasis on quoting and the reference link are slightly redundant, but the density of examples and warnings is justified by the complexity of KQL search.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema tool, it adequately describes what is returned (listed fields plus body preview) and how to get full content elsewhere. Combined with the schema, which already documents pagination (skip, skiptoken, fetchAllPages) and parameter conflicts, an agent has enough context to call it correctly. It could add folder-level sibling guidance, but that is not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema carries the parameter details, but the description still adds practical meaning: it gives a concrete KQL property list, example expressions, the mandatory double-quote rule, and a recommended $select field set. It does not repeat every parameter, which is appropriate given the rich schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb plus resource and scope: 'List, search, and filter Outlook email messages in the signed-in user's mailbox across all folders.' It names the return shape (metadata plus body preview) and thereby distinguishes itself from siblings like get-mail-message, which returns full bodies, and list-mail-folder-messages, which is folder-scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: choosing $search, $filter, $top, and $select depending on the task, and it explicitly routes full-body reads to get-mail-message. It stops short of a full when-not list (e.g., it does not mention list-mail-folder-messages for single-folder queries or delta for change tracking), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-mail-ruleslist-mail-rulesARead-only
Get all the messageRule objects defined for the user's inbox.
💡 TIP: Lists all message rules for a mail folder. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules. Each rule has displayName, sequence, isEnabled, conditions (fromAddresses, subjectContains, etc.), actions (moveToFolder, forwardTo, delete, etc.), and exceptions.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| mailFolderId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context by enumerating the returned rule fields (displayName, sequence, isEnabled, conditions, actions, exceptions) and clarifying that rules belong to a mail folder. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The core action is front-loaded, and the tip compactly adds the most useful context: how to get the folder ID and what the returned rules look like.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 13 well-documented schema parameters, the description is mostly complete: it names the required folder context, points to the folder-list source, and describes the result fields. The only gap is the unresolved inbox-vs-any-folder wording, which could confuse an agent about whether mailFolderId is restricted to the inbox.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value for the required mailFolderId parameter by pointing to list-mail-folders for the Inbox folder ID, which helps an agent construct a valid call. Other parameters are already well documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get all the messageRule objects' and 'Lists all message rules for a mail folder'. It is distinguishable from the create/update/delete-mail-rule siblings by its list action. However, the first sentence says 'defined for the user's inbox' while the tip broadens to any mail folder, creating slight ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context: use the Inbox folder ID and get it from list-mail-folders. It does not explicitly compare this tool to alternatives or state when not to use it, but the prerequisite guidance is a clear improvement over no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-my-calendar-permissionslist-my-calendar-permissionsARead-only
The permissions of the users with whom the calendar is shared.
💡 TIP: Lists share recipients and delegates on the user's primary calendar. Returns calendarPermission objects with id, role ('none' | 'freeBusyRead' | 'limitedRead' | 'read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess' | 'custom'), emailAddress { name, address }, isInsideOrganization, isRemovable, allowedRoles. Returns an empty collection when called by a delegate or share recipient (only the calendar owner sees the full list). For a non-primary calendar, use /me/calendars/{calendar-id}/calendarPermissions — not currently exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral detail: it returns an empty collection when called by a delegate or share recipient, and only the owner sees the full list. This is valuable context that annotations do not convey. It also describes the return object structure, but not all behavioral aspects like pagination or rate limits, though those are partially covered by parameter descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the main purpose in the first sentence and a TIP that adds specificity. It front-loads the core message and includes important return details and edge cases without excessive verbosity. The length is justified given the complexity and the need to convey the scope and delegate behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is quite complete for a read-only list tool. It specifies the scope (primary calendar), the return object structure, the delegate edge case, and points to the alternative endpoint. There is no output schema, but the description explicitly lists the fields and role enums, filling that gap. Minor omission: it doesn't mention pagination behavior in the description (though parameters cover it), and it doesn't note any required permissions. Overall, the agent has enough information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all 12 parameters have detailed descriptions explaining usage, such as $top, $skip, $count, etc. The tool description itself doesn't add anything about parameters beyond what the schema already provides. Since schema fully covers parameter semantics, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: lists permissions of users with whom the calendar is shared. It specifies it operates on the user's primary calendar, distinguishing it from the non-primary calendar endpoint (mentioned as not exposed). It also enumerates the returned object fields, making the resource and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: for the primary calendar. It explicitly states that for a non-primary calendar a different endpoint is needed (though not currently exposed). It also notes that delegates/share recipients will get an empty collection, guiding the agent about expected results. However, it doesn't provide explicit when-not-to-use conditions beyond the primary vs non-primary distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-onenote-notebookslist-onenote-notebooksCRead-only
Retrieve a list of notebook objects.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not contradict them. However, it adds no behavioral context beyond the annotations—no mention of pagination, response scope, or how results are ordered. It is essentially a bare restatement of the tool's action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, front-loading the core action. It is concise, though arguably too terse—it provides the minimum viable statement without any helpful elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, no output schema, and a rich sibling ecosystem, this description is incomplete. An agent gets no context about what a 'notebook object' entails, what data is returned, or how to handle large result sets. The schema covers parameter semantics, but the overall context is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the 12 parameters thoroughly documented. The description adds no parameter-level meaning, but since the schema already carries the full load, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve a list') and resource ('notebook objects'), which clearly identifies what the tool does and differentiates it from siblings like list-onenote-section-groups or list-onenote-pages. It is unambiguous, though it lacks any qualifiers such as scope (e.g., user's notebooks vs all accessible).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus the many sibling listing tools (e.g., list-onenote-sections, list-onenote-pages). There is no mention of intended use cases, prerequisites, or how it relates to other notebook-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-onenote-notebook-sectionslist-onenote-notebook-sectionsBRead-only
Retrieve a list of onenoteSection objects from the specified notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| notebookId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds little beyond the notebook scoping constraint and the fact that a list is returned; it does not disclose pagination behavior, response size, or OneNote-hierarchy nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero wasted words. It is efficient, though very sparse; a bit more contextual guidance would make it more helpful without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no output schema, and many sibling tools, the one-sentence description plus the parameter-rich schema is minimally sufficient for a simple list call. It omits OneNote hierarchy context and any guidance on when to prefer this over list-all-onenote-sections or list-onenote-section-pages, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even though the description itself adds no parameter meaning. However, many schema descriptions are generic Graph/OData boilerplate with mail-centric examples (e.g. select shows 'id,subject,from,receivedDateTime'), and the tool description does not correct or tailor them to OneNote sections.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('onenoteSection objects'), and a scope ('from the specified notebook'). It is clear enough to distinguish this from list-all-onenote-sections, but it does not explicitly call out sibling alternatives or mention that it does not return section groups/pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you need sections from a particular notebook. However, there is no explicit when-to-use versus alternatives such as list-all-onenote-sections, list-onenote-section-groups, or list-onenote-section-pages, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-onenote-pageslist-onenote-pagesARead-only
Retrieve a list of page objects.
💡 TIP: Lists all OneNote pages across every notebook and section the user has access to — transverse alternative to walking notebooks → sections → pages. Default returns top 20 ordered by lastModifiedTime desc. Supports $filter (e.g. lastModifiedTime gt 2026-01-01, or contains(tolower(title), 'topic') for title search), $top (max 100), $select, and $expand=parentNotebook,parentSection. Use this instead of bouncing through list-onenote-notebooks / list-all-onenote-sections / list-onenote-section-pages when you have a topic in mind.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds valuable behavioral context: default page size and ordering, support for $filter/$select/$expand, and the fact that it spans all notebooks/sections. It could have mentioned pagination behavior (e.g., @odata.nextLink) explicitly, but that is handled in the schema, so the description adds sufficient behavior without repeating annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose ('Retrieve a list of page objects') followed by a well-structured TIP that explains the tool's cross-cutting nature and usage. Every sentence adds value: from the alternative navigation path, to default behavior, to filtering examples, to a direct call-to-action on when to use it. There is no fluff; it is concise but comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, no output schema, and the complexity of OData features, the description covers all essential aspects: default ordering and size, supported OData clauses, expansion options, and the niche this tool fills relative to its siblings. It also indirectly addresses response-size concerns by advising small $top values and use of $select. The description is complete enough for an agent to call the tool correctly without additional lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by providing concrete examples of filter expressions (lastModifiedTime gt 2026-01-01, contains(tolower(title),'topic')), the $expand=parentNotebook,parentSection suggestion, and guidance on $top limits (max 100) and using $select to reduce payload. This adds meaningful context for parameter usage that the schema does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Retrieve a list of page objects' and immediately distinguishes itself from siblings by noting it is a 'transverse alternative' that lists pages across all notebooks and sections. It explicitly names three alternative tools, making differentiation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this instead of bouncing through list-onenote-notebooks / list-all-onenote-sections / list-onenote-section-pages when you have a topic in mind.' It also explains the default behavior (top 20, ordered by lastModifiedTime desc) and the supported OData parameters, leaving no ambiguity about when to choose this tool over its alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-onenote-section-groupslist-onenote-section-groupsARead-only
Retrieve a list of sectionGroup objects.
💡 TIP: Lists all OneNote section groups (subfolders inside notebooks that contain their own sections and nested section groups) for the user. A section group is a folder-like container — many notebooks use them to organize sections by theme. Default sort is name asc. Supports $expand=sections,sectionGroups,parentNotebook,parentSectionGroup to traverse the full hierarchy. Pair with list-onenote-notebooks for a complete picture of the user's notebook structure.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds useful behavioral details beyond that: "Default sort is name asc" and specific navigable relationships via "$expand=sections,sectionGroups,parentNotebook,parentSectionGroup." This helps an agent predict ordering and hierarchy traversal, though it does not address pagination or response size nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides a clear conceptual analogy, behavioral details, and a companion-tool suggestion. Every sentence contributes useful information, though the opening sentence and the TIP sentence are slightly redundant since both describe retrieving section groups.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with 100% schema coverage, the description is fairly complete: it defines the resource, clarifies scope, notes default ordering, lists supported expansions, and names a related tool. It does not describe default returned fields or pagination behavior, but the absence of an output schema is partially mitigated by the straightforward "list of sectionGroup objects" statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds value by enumerating the exact expand values relevant to OneNote section groups and the default sort behavior. This goes beyond the generic expand explanation in the schema and meaningfully helps an agent use the expand parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: "Retrieve a list of sectionGroup objects" and then explains in plain language that these are folder-like containers inside notebooks. It does not explicitly contrast itself with siblings like list-onenote-notebook-sections or list-all-onenote-sections, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage context: it lists all section groups for the user, mentions the default sort, and recommends pairing with list-onenote-notebooks for a complete notebook structure. It stops short of saying when not to use this tool or how it compares to the related section/page list tools, so it misses the explicit exclusion guidance needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-onenote-section-pageslist-onenote-section-pagesCRead-only
Retrieve a list of page objects from the specified section.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| onenoteSectionId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no extra behavioral context such as pagination behavior, response size, or that it returns only page metadata rather than content. It adds minimal value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence and is front-loaded with the purpose. However, it is too terse to provide meaningful guidance, lacking any detail that would earn its place beyond stating the obvious.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters and no output schema, the description is severely incomplete. It gives no overview of what the response looks like, how to use pagination or selection, or any operational guidance. The agent would have to rely entirely on the schema and annotations, which do not cover the overall behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter has a detailed description in the schema. The tool description itself adds no parameter information, but the schema carries the burden, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve', the resource 'page objects', and the context 'specified section'. It is understandable but does not explicitly distinguish it from sibling tools like list-onenote-pages or list-all-onenote-sections, though the section scope is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention any context, prerequisites, or differences from other listing tools, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-outlook-categorieslist-outlook-categoriesARead-only
Get all the categories that have been defined for a user.
💡 TIP: Lists the user's Outlook categories (colored labels) used to tag messages, events, contacts, and tasks. Each category has displayName and color (preset0 through preset24, or 'none'). Use this to show available tags before applying via update-mail-message or update-calendar-event with body { categories: ['Category Name'] }.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds behavioral detail about categories having displayName and color (preset0-24 or 'none'), which is useful but not rich—no pagination or rate-limit behavior is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a focused tip. The core action is stated first, and the tip adds practical context without redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description adequately covers the return shape (displayName, color), the use case (show tags before applying), and the scope (user's categories). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—all 12 parameters have detailed descriptions (e.g., $top, $skip, $filter, $search). The tool description adds no parameter-specific semantics, so the baseline score of 3 applies; the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get all the categories that have been defined for a user.' It further clarifies the domain ('Outlook categories (colored labels)') and contrasts with the sibling create-outlook-category by listing existing items instead of creating new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip explicitly states when to use this tool: 'Use this to show available tags before applying via update-mail-message or update-calendar-event.' It provides a concrete workflow. It does not name alternatives like create-outlook-category, but the read-only listing role is clear from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-outlook-contactslist-outlook-contactsCRead-only
Get a contact collection from the default contacts folder of the signed-in user. There are two scenarios where an app can get contacts in another user's contact folder:
💡 TIP: $filter only supports startswith() — contains() and eq on emailAddresses do not work. Use $search as alternative for broader matching.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description attempts to disclose a $filter limitation but this contradicts the input schema, which says contains() is supported with $count=true. With readOnlyHint already covering no side effects, this misleading tip adds negative value. No other behavioral context (auth, pagination, nextLink behavior) is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short but structurally flawed: the second sentence is an incomplete fragment that leaves the reader hanging. The tip is placed at the end but is inaccurate; the incomplete scenario sentence earns no place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, the description should provide high-level context like response shape, pagination expectations, or when a specific-folder tool is needed. It instead leaves a dangling scenario and contradicts the schema's filter guidance, so it is incomplete for an agent deciding how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description's filter tip conflicts with the schema's guidance that contains() can be used with $count=true. It also doesn't clarify which parameters are affected by the two-scenarios claim. This actively undermines correct parameter use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence clearly states a specific action and scope: getting a contact collection from the signed-in user's default contacts folder. This distinguishes it from siblings like list-contact-folder-contacts and get-outlook-contact. However, the dangling 'There are two scenarios...' sentence adds confusion without enumerating those scenarios, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over sibling tools such as list-contact-folder-contacts or get-outlook-contact. The tip about $filter/$search addresses query parameters, not tool selection. The incomplete 'two scenarios' sentence offers no usable routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-plan-bucketslist-plan-bucketsARead-only
Retrieve a list of plannerBucket objects contained by a plannerPlan object.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| plannerPlanId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with readOnlyHint=true and adds the containment relationship (buckets are contained by a plannerPlan), which is useful context beyond annotations. It does not add behavioral details about pagination or payload size, though the schema's parameter descriptions partially cover those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. It states the verb, object, and scope efficiently, which is appropriate for the tool's simple read-only purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is read-only, has full schema parameter coverage, and has annotations covering safety. The short description is sufficient because the schema explains the parameters, and the purpose already implies the return type is a list of plannerBucket objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for all 13 parameters, so the baseline of 3 applies. The description itself adds no parameter-specific meaning, but the schema fully documents plannerPlanId and all query options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve a list of plannerBucket objects contained by a plannerPlan object.' This clearly distinguishes it from single-item tools like get-planner-bucket and from sibling list tools like list-planner-tasks or list-plan-tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives, nor any exclusions or sibling routing. The description only states what the tool does, so the agent must infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-planner-task-messageslist-planner-task-messagesARead-only
[beta] Retrieve a list of plannerTaskChatMessage objects associated with a plannerTask.
💡 TIP: Lists messages in a Planner task's chat — the modern Planner 'task chat', distinct from the legacy conversationThreadId comments (which live in the M365 group conversation thread). Each message has id, content (HTML), createdBy, createdDateTime, mentions, reactions. BETA Graph API: subject to change; delegated work/school accounts only — no application permissions, no personal Microsoft accounts, global cloud only (not GCC/DoD/21Vianet).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful context beyond that: BETA API status, account permission restrictions, cloud environment limits, and the kind of fields returned per message. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably compact, front-loads the core purpose, and organizes extra context with a TIP marker. The field list and beta/account constraints are all useful, though the description is slightly dense and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters and no output schema, the description plus rich input schema covers the essential invocation knowledge: what is returned, key constraints, and pagination guidance via parameter descriptions. It does not fully describe nested shapes like mentions or reactions, but it is adequate for selection and calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (top, skip, count, expand, filter, search, select, orderby, skiptoken, fetchAllPages, plannerTaskId, includeHeaders, excludeResponse) already has a thorough description. The tool description adds no parameter-specific meaning; the baseline of 3 applies because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieve a list of plannerTaskChatMessage objects associated with a plannerTask.' It also distinguishes this from the legacy conversationThreadId comments, so an agent can clearly tell this tool's scope apart from related planner and comment operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is for the modern Planner 'task chat' rather than legacy comments, and it states account/environment constraints (delegated work/school accounts only, no personal accounts, global cloud only). It stops short of naming alternative tools explicitly, so it loses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-planner-taskslist-planner-tasksCRead-only
Retrieve a list of plannertask objects assigned to a User.
💡 TIP: Priority is 0-10 (lower = higher priority); Planner's own UI presets are 1=Urgent, 3=Important, 5=Medium, 9=Low.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the scope ('assigned to a User') and a priority-scale tip, with no additional behavioral context such as pagination behavior, which user is resolved, or what the response contains beyond 'a list'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core purpose in the first sentence and a genuinely useful tip in the second. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no statement of which user ('a User' is ambiguous—current user? specified user?), the description leaves important orientation gaps. The rich schema covers parameters well, but the tool-level context and differentiation from 'list-plan-tasks' are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a useful domain note about priority values (0-10, lower = higher priority), but this is about returned task data rather than the tool's parameters, so it does not materially enrich parameter understanding beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Retrieve a list') and the resource ('plannertask objects assigned to a User'). It does not explicitly distinguish itself from the sibling 'list-plan-tasks', so it misses the last bit of differentiation, but the verb+resource+scope is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The phrase 'assigned to a User' implies a use case, but the description never contrasts with sibling tools like 'list-plan-tasks' or states which user is meant, leaving the agent to infer when this tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-plan-taskslist-plan-tasksARead-only
Retrieve a list of plannerTask objects associated with a plannerPlan object.
💡 TIP: Priority is 0-10 (lower = higher priority); Planner's own UI presets are 1=Urgent, 3=Important, 5=Medium, 9=Low.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| plannerPlanId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Retrieve' wording is consistent with those. The added priority tip (0-10 scale and UI presets) is useful domain context, though the description does not disclose default ordering, pagination behavior, or response details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core purpose, and the priority tip is the only additional content. No filler or redundant restating of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 13-parameter schema, additionalProperties, and annotations, the description is sufficient for the core use case: it names the returned collection and adds priority semantics. The main missing piece is explicit sibling guidance, but the structure and schema cover invocation details well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra value beyond the schema by explaining the priority field semantics and Planner UI presets, which helps agents interpret results or build filters/orderby expressions involving priority.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Retrieve') and resource ('plannerTask objects'), and further scopes it to tasks 'associated with a plannerPlan object.' This association distinguishes it from the sibling list-planner-tasks tool, so an agent can tell which tool matches a plan-scoped query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'associated with a plannerPlan object' — use this when you already have a plan and want its tasks. However, the description does not explicitly address when not to use it or mention the alternative list-planner-tasks for broader task listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-specific-calendar-eventslist-specific-calendar-eventsARead-only
List events from one of the signed-in user's calendars, addressed by calendar ID.
💡 TIP: WARNING: Does NOT expand recurring events — only returns seriesMaster. Use get-specific-calendar-view instead.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| timezone | No | IANA timezone name (e.g., "America/New_York", "Europe/London", "Asia/Tokyo") for calendar event times. If not specified, times are returned in UTC. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| expandExtendedProperties | No | When true, expands singleValueExtendedProperties on each event. Use this to retrieve custom extended properties (e.g., sync metadata) stored on calendar events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds a critical behavioral trait beyond that: the tool does NOT expand recurring events and only returns seriesMaster objects. This is a significant gotcha for an agent filtering or expecting individual instanceshol, and it directly impacts result interpretation. It does not disclose other potential behaviors (e.g., response size, default ordering), but the recurrence warning is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the core purpose front-loaded and the critical caveat second. The phrasing '💡 TIP: WARNING:' is slightly redundant but still compact)Skip. Every sentence earns its place; no filler. The warning is essential and placed where it is unlikely to be missed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with a rich schema (100% coverage) and no output schema, the description appropriately focuses on the most decision-relevant caveat (recurring events). It also aligns the tool's role among siblings. It does not restate parameter details or output expectations, but those are handled by the schema and the tool's read-only annotation. The description is complete enough for correct selection and invocation, albeit without mentioning the absence of a date-range parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has a detailed description (including examples, limitations, and guidance like top's 'start small (e.g. 5–15)'). The tool description itself adds param semantics only minimally by pointing out that events are 'addressed by calendar ID', which is already in the schema for calendarId. With full schema coverage, the baseline of 3 applies; no extra compensation from the description is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List'), a specific resource ('events from one of the signed-in user's calendars'), and the defining addressing mechanism ('by calendar ID'). This immediately distinguishes it from sibling tools like list-calendar-events, which likely aggregates across calendars, and get-specific-calendar-view, which handles time-bounded views. The action and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit exclusion and recommendation: 'Does NOT expand recurring events… Use get-specific-calendar-view instead.' This gives the agent a clear condition for choosing an alternative. However, it does not offer broader usage guidance relative to other related siblings (e.g., list-calendar-events, get-calendar-event, or list-calendar-event-instances), leaving the primary selection logic to be inferred from the name and the calendar-ID mention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-subscriptionslist-subscriptionsARead-only
Retrieve the properties and relationships of webhook subscriptions, based on the app ID, the user, and the user's role with a tenant. The content of the response depends on the context in which the app is calling; for details, see the scenarios in the Permissions section.
💡 TIP: Lists webhook subscriptions owned by the current app/user. Returns id, resource, changeType, notificationUrl, expirationDateTime, clientState. Use $filter=resource eq '/me/messages' to find subscriptions for a specific resource. No dedicated 'Subscription.*' scope exists — the caller must already have a read permission for the subscribed resource (e.g. Mail.Read for /me/messages), which is supplied by the tool that reads that resource.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral details beyond that: the response depends on the calling context, and it names the fields returned (id, resource, changeType, etc.). It does not go into pagination or error behavior, but with annotations covering destructiveness, a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but well-structured: a clear opening sentence, then a bullet-point tip. The opening is concise and informative, and the tip adds practical value. Some redundancy exists ('Retrieve' and 'Lists'), but it does not hurt clarity or length; it remains within reasonable bounds for a tool with 12 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the returned fields (id, resource, changeType, notificationUrl, expirationDateTime, clientState), which an agent needs. It also explains the permission dependency and the context-dependent response. It could mention pagination hints but those are already in the input schema. Overall, it covers the essential context for calling this list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by giving a concrete $filter usage example and explaining that permissions must already exist for the subscribed resource, which goes beyond the schema's generic 'OData filter expression.' It does not discuss individual parameters but its tip enriches the filter semantics enough to warrant a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Retrieve the properties and relationships of webhook subscriptions,' and specifies the scoping (app ID, user, tenant role). It distinguishes itself from sibling tools like get-subscription by the word 'list' and the mention of returning multiple subscriptions, and it is clearly a read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: it states this lists subscriptions owned by the current app/user, gives a concrete $filter example for a specific resource ('/me/messages'), and warns about the absence of a dedicated Subscription.* scope, explaining the permission prerequisite. This is more than most tool descriptions offer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-supported-languageslist-supported-languagesARead-only
Get the list of locales and languages that are supported for the user, as configured on the user's mailbox server. When setting up an Outlook client, the user selects the preferred language from this supported list. You can subsequently get the preferred language by getting the user's mailbox settings.
💡 TIP: Lists locales and languages the user's mailbox server supports for the Outlook UI and message rendering. Returns localeInfo objects with locale (e.g. 'en-US') and displayName ('English (United States)'). Use this to validate the locale value before calling update-mailbox-settings to change the user's preferred language.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value beyond that by specifying the return shape (localeInfo objects with locale and displayName) and noting the data source (mailbox server configuration). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat redundant: the first sentence and the tip both state that the tool lists supported languages. The tip adds return format and usage guidance, but the formal description could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description compensates by describing the return objects ('localeInfo objects with locale and displayName'). It also explains the tool's role in the Outlook setup flow. Parameter-level details are covered by the schema, so the description is sufficiently complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-specific semantics; the tip about validating locale is about the tool's overall purpose, not about top, skip, filter, or other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the list of locales and languages that are supported for the user, as configured on the user's mailbox server.' It is clearly distinct from siblings like list-supported-time-zones and get-mailbox-settings, and the context about Outlook client setup reinforces its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit use case: 'Use this to validate the locale value before calling update-mailbox-settings to change the user's preferred language.' This tells the agent when to use the tool, though it does not mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-supported-time-zoneslist-supported-time-zonesARead-only
Get the list of time zones that are supported for the user, as configured on the user's mailbox server. You can explicitly specify to have time zones returned in the Windows time zone format or Internet Assigned Numbers Authority (IANA) time zone (also known as Olson time zone) format. The Windows format is the default. When setting up an Outlook client, the user selects the preferred time zone from this supported list. You can subsequently get the preferred time zone by getting the user's mailbox settings.
💡 TIP: Lists time zones the user's mailbox server supports. TimeZoneStandard path parameter must be one of: Windows (default — Windows time zone names like 'Pacific Standard Time'), or Iana (IANA / Olson names like 'America/Los_Angeles'). Note the PascalCase — the values are case-sensitive enums, not lowercase strings. Returns timeZoneInformation objects with alias and displayName. Use the result to validate or look up the value before calling update-mailbox-settings to change the user's preferred timeZone, 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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| TimeZoneStandard | Yes | Value for the 'TimeZoneStandard' path segment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be a safe read-only operation. The description adds value beyond annotations by disclosing the default format (Windows), the case-sensitive PascalCase enum behavior, and the return shape (timeZoneInformation objects with alias and displayName). No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a main paragraph and a TIP block, front-loading the core purpose. It is relatively long but every segment adds value: format options, usage context, return shape, and a critical case-sensitivity warning. The default format is mentioned twice (once in the main text, once in the TIP), which is a minor redundancy, so it loses one point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and 10 parameters, the description covers the essential context: what the tool returns, how to use it in a larger workflow, and the critical TimeZoneStandard semantics. The generic pagination/filter parameters are fully documented in the schema, so the description does not need to repeat them. It could mention that the list may be large and pagination is available, but the schema handles that, so the description is still largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the core parameter TimeZoneStandard is only described as 'Value for the TimeZoneStandard path segment' in the schema. The description fills this gap by explaining the allowed values (Windows vs Iana), giving examples ('Pacific Standard Time', 'America/Los_Angeles'), and warning about case sensitivity. This is exactly the kind of semantic enrichment the dimension rewards.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists time zones supported for the user, as configured on the mailbox server, and mentions the two format options. This is a specific verb+resource that distinguishes it from the sibling list-supported-languages. The TIP reinforces the scope and clarifies the output objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: to look up valid time zone values before calling update-mailbox-settings or setting timeZone on calendar events, and explicitly says 'don't guess a time zone name from memory, look it up here.' It also points to get-mailbox-settings for retrieving the preferred time zone, providing a clear alternative within the same workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-todo-linked-resourceslist-todo-linked-resourcesARead-only
Get information of one or more items in a partner application, based on which a specified task was created. The information is represented in a linkedResource object for each item. It includes an external ID for the item in the partner application, and if applicable, a deep link to that item in the application.
💡 TIP: Lists resources linked to a To Do task (emails, URLs, etc.). Each linked resource has displayName, webUrl, applicationName, and externalId.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| todoTaskId | Yes | 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. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds useful context about the returned linkedResource fields, but it does not disclose pagination defaults, response envelope behavior, or error conditions, which would be needed for a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: two sentences state the purpose and object shape, and the tip adds concrete examples and field names without repeating the formal definition. No filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter read tool with no output schema, the description plus the fully described schema covers required path IDs, pagination options, and key output fields. A full response example or explicit collection envelope would be needed for a 5, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions are already detailed (e.g., todoTaskListId naming guidance, $top sizing advice, skiptoken usage). The prose description does not add input-parameter semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get information of one or more items in a partner application' linked to a specified task, and it names the return shape as linkedResource objects with external ID and deep link. This makes the tool distinguishable from the create-todo-linked-resource and delete-todo-linked-resource siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the retrieval context clear: it lists resources linked to a specific To Do task, so an agent knows when to choose this read operation. It does not explicitly name alternatives or state when not to use it, but the sibling names and read-only framing make the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-todo-task-listslist-todo-task-listsARead-only
Get a list of the todoTaskList objects and their properties.
💡 TIP: Lists all To Do task lists. Returns todoTaskList-id needed for all task operations. The default list is typically called 'Tasks'. NOTE: $select is NOT supported by this endpoint — do not pass select parameter, Graph returns 400.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already mark the tool as read-only and non-destructive, the description adds a valuable behavioral warning: $select is not supported and passing it causes a Graph 400. It also notes the default list is typically called 'Tasks', which is useful contextual behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a clear purpose sentence, a scannable tip, and a critical note. Every sentence contributes useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing operation, the description provides enough context: what it returns, the common default list, and the key $select caveat. The input schema covers pagination and filtering details, so the description does not need to repeat them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the baseline is 3. The description adds important parameter-level guidance by explicitly warning that the select parameter must not be passed despite the schema documenting it generically. This is a meaningful correction beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Get a list of the todoTaskList objects and their properties.' It also clarifies it lists all To Do task lists, which distinguishes it from related tools like list-todo-tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states this endpoint returns the todoTaskList-id needed for all task operations, giving the agent context for when to call it before task-related operations. It does not explicitly name sibling alternatives or exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-todo-taskslist-todo-tasksARead-only
Get the todoTask resources from the tasks navigation property of a specified todoTaskList.
💡 TIP: Lists tasks in a To Do list. Requires todoTaskList-id — use list-todo-task-lists to find it. NOTE: $select is NOT supported — do not pass select, Graph returns 400. Use $filter=status eq 'notStarted' or $filter=status eq 'completed' to filter by status. Use $top to limit results. Status values: 'notStarted', 'inProgress', 'completed', 'waitingOnOthers', 'deferred'.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the read-only safety profile. The description adds critical behavioral disclosure: '$select is NOT supported — do not pass select, Graph returns 400' and enumerates valid status values, which are not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, followed by a pragmatic TIP, a critical NOTE, and usage examples. Every sentence earns its place and avoids repeating schema content, though the array of status values could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the essential operational context: required ID source, unsupported $select, filter usage, and status values. With 13 parameters but 100% schema coverage, the description sufficiently bridges the gap; no output schema exists, but the tool's purpose implies a list of task objects, so absence of return description is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds practical meaning beyond the schema by giving concrete filter examples ('status eq ''notStarted'''), listing status values, and reinforcing the $top guidance, which helps an agent form valid queries that generic OData parameter descriptions do not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('todoTask resources from the tasks navigation property of a specified todoTaskList'). The TIP explicitly says 'Lists tasks in a To Do list', distinguishing it from sibling list-todo-task-lists which lists lists, and from task mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit prerequisite and sibling pointer: 'Requires todoTaskList-id — use list-todo-task-lists to find it.' Also gives concrete usage guidance for $filter and $top, and warns against $select, making when-to-use and when-not-to-use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginC
Authenticate with Microsoft account
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force a new login even if already logged in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure, but it only says 'Authenticate with Microsoft account.' It does not mention side effects like establishing a session, whether user interaction (e.g., browser prompt) is required, or how the 'force' parameter affects behavior. The parameter is mentioned in the schema but not integrated into the tool's behavioral description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence with no wasted words. However, it lacks structured presentation of key aspects (e.g., side effects, usage), so it is very concise but not well structured for complex information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an authentication tool that likely has significant side effects and requires user interaction, the description is incomplete. It does not mention what happens after authentication, return values, or the effect of the 'force' parameter in context. Without annotations or output schema, the agent lacks essential context to predict outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides complete documentation for the single 'force' parameter (coverage 100%), so the description does not need to add parameter details. It adds no extra meaning beyond the schema, aligning with the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Authenticate with Microsoft account' clearly states the verb (authenticate) and resource (Microsoft account). It distinguishes from siblings like verify-login (which checks status) and logout (which ends session), though it does not elaborate on the specific outcome (e.g., establishing a session or obtaining tokens).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus related authentication tools such as verify-login, select-account, or remove-account. The description does not mention typical call scenarios, prerequisites, or when the 'force' parameter is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutB
Log out from Microsoft account
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states the action without explaining side effects such as token invalidation, whether it affects all sessions, or if it is permanent. This lack of detail leaves an agent uncertain about the consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear clause with no unnecessary words. It is appropriately concise for a simple, parameterless action, though it could benefit from a sentence about behavior or usage context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple logout action with no parameters or output schema, the description provides the essential action but lacks context about the result (e.g., does it invalidate tokens? clear local state?). It is sufficient for basic invocation but leaves some behavioral ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers them (100% coverage). The description correctly adds no parameter information because none exist, meeting the baseline of 4 for 0-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Log out') and the resource ('Microsoft account'), making the primary purpose unambiguous. It does not explicitly differentiate from siblings like 'remove-account' or 'login', but the verb and resource are specific enough that the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'remove-account' or 'login'. It does not mention context like ending a session before switching accounts, nor does it explain differences from related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge-excel-rangemerge-excel-rangeADestructive
Merge an Excel range.
💡 TIP: Merge the cells in the given range into a single cell. Body: { across: false } merges the entire range into one cell; { across: true } merges each row separately. Useful for building styled headers, banner rows, and report layouts.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the mutation nature is known. The description adds the `across`-dependent behavior (merging entire range vs. each row separately), which is useful. It does not describe side effects on cell contents or reversibility, but given annotation coverage, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—two sentences plus a tip—and the critical `across` distinction is front-loaded within the tip. No wasted words; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is destructive and has no output schema, yet the description does not mention return values or what happens after merging (e.g., which cell retains data). It also doesn't address prerequisites like worksheet existence. While adequate for a simple operation, an agent might need additional details about the response or edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, but the description explicitly explains the `across` parameter's semantics (false merges whole range, true merges per row), which is not evident from the schema alone. It does not elaborate on other parameters, but those are path segments with clear schema descriptions, so the added value is substantial for the key parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (merge) and resource (Excel range), and the tip clarifies that merging combines cells into one. It does not explicitly differentiate from siblings like unmerge-excel-range or other range operations, but the purpose is unambiguous enough for an agent to grasp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip provides specific use cases ('styled headers, banner rows, and report layouts'), giving implied context for when to use the tool. However, it does not mention alternatives or explicitly state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move-mail-messagemove-mail-messageADestructive
Move a message to another folder within the specified user's mailbox. This creates a new copy of the message in the destination folder and removes the original message.
💡 TIP: destinationId accepts folder ID or well-known name (inbox, drafts, sentitems, deleteditems, junkemail, archive).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds a critical behavioral detail: 'This creates a new copy of the message in the destination folder and removes the original message.' This goes beyond the annotation by explaining the exact side effect. It also adds the tip about well-known folder names, which clarifies behavior for destination resolution. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences plus a single emoji-prefixed tip. The core purpose is stated in the first sentence, the key behavioral consequence in the second, and the tip is genuinely useful. No filler or redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive move operation with no output schema, the description covers the essential semantics: what it does, where it moves, and how to specify the destination. It does not mention return values, but the confirm parameter is separately documented in the schema, and the destructive nature is already annotated. An agent has enough to invoke it correctly, though it could benefit from a note about the confirm gate when enabled, but that is covered in the confirm parameter description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% and the schema already documents most parameters (e.g., messageId, confirm). The description adds semantic value by clarifying that DestinationId accepts either a folder ID or a well-known name (inbox, drafts, etc.), which is not evident from the schema's bare 'type: string'. This is a meaningful addition beyond the structured definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Move a message to another folder within the specified user's mailbox.' It immediately distinguishes from siblings like copy-mail-message by explicitly stating it removes the original. This leaves no ambiguity about what the tool does relative to other mail operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never names alternative tools or gives exclusions. It implies when to use it based on the semantic of 'move' (removes original) but does not explicitly say 'use this instead of copy-mail-message when you want the original gone.' The tip about DestinationId is operational but not about tool selection. This is adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move-rename-onedrive-itemmove-rename-onedrive-itemADestructive
Move or rename a OneDrive item.
💡 TIP: Move and/or rename a file or folder. To move, provide parentReference with the target folder's id. To rename, provide a new name. Both can be done in a single request.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a destructive, non-read-only operation, which covers the core safety profile. The description adds that both move and rename can be combined in one request, but it does not disclose behavior around name conflicts, overwrite semantics, reversibility, or what happens to existing links or references. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise and well-structured: a one-sentence function statement followed by a focused tip. Every sentence earns its place, and the most actionable guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with nested-body parameters and no output schema, the description covers the primary invocation mechanics but misses some context: it does not mention conflict or overwrite behavior, prerequisites such as permissions, or what the response will contain. The schema fills in parameter details, but the description alone is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high, so the schema already documents most parameters. The description adds meaningful semantics beyond the schema by explaining that body.parentReference should hold the target folder's id and that body.name should hold the new name, directly guiding the agent in how to construct the request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Move or rename a OneDrive item.' It also clarifies the two operation modes and that they can be combined. However, it does not explicitly differentiate itself from sibling tools like copy-drive-item, leaving the distinction to be inferred from the move/rename wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip gives concrete invocation guidance: provide parentReference with the target folder's id to move, provide a new name to rename, and both can be done in a single request. This is useful context for selecting the right parameters, though it does not explicitly state when not to use this tool or mention alternatives such as copy-drive-item.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse-teams-urlARead-only
Converts any Teams meeting URL format (short /meet/, full /meetup-join/, or recap ?threadId=) into a standard joinWebUrl. Use this before list-online-meetings when the user provides a recap or short URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Teams meeting URL in any format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it performs a conversion, which is a read-only transformation consistent with the readOnlyHint annotation. It adds format-specific details beyond the annotation (enumerating URL types) but does not mention potential error handling or edge cases (e.g., invalid URLs), which would be the next level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no superfluous words. The core action is front-loaded, and the usage guidance is concise. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description fully covers what the tool does, when to use it, and what input forms are expected. Nothing an agent needs to correctly invoke it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already describes the parameter as 'Teams meeting URL in any format', the description enriches this by specifying the exact format variants accepted. This additional semantic detail helps the agent understand what constitutes a valid input and goes beyond the generic schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states that the tool converts Teams meeting URLs into a standard joinWebUrl, enumerating the specific accepted formats (short /meet/, full /meetup-join/, recap ?threadId=). It clearly distinguishes its purpose from the mentioned sibling list-online-meetings by indicating when it should be used as a precursor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit usage directive: 'Use this before list-online-meetings when the user provides a recap or short URL.' This tells the agent exactly when to invoke this tool and points to the alternative, though it doesn't explicitly state when not to use it for full URLs, the implication is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reauthorize-subscriptionreauthorize-subscriptionADestructive
Reauthorize a subscription when you receive a reauthorizationRequired challenge.
💡 TIP: Reauthorizes a subscription after receiving a 'reauthorizationRequired' lifecycle notification from Microsoft Graph. No body required. Must be called within the reauthorizationRequiredDateTime window (typically 48h) to avoid subscription expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| subscriptionId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint: true, lowering the disclosure bar. The description adds genuinely useful context beyond the annotations: the 48h window, the lifecycle trigger, and the 'no body required' note. It does not explicitly describe timing side effects on expiry, but it goes beyond what annotations declare. No contradiction with the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded, and the text is short. However, there is noticeable redundancy: the TIP's first clause ('Reauthorizes a subscription after receiving a reauthorizationRequired lifecycle notification') nearly repeats the main description verbatim. The genuinely useful additions (48h window, no body required) could have been merged into a single tighter paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single required parameter, full schema coverage, and a destructiveHint annotation, the description covers the key operational facts: the trigger condition, the time window, and that no body is required. Absent an output schema, return-value behavior is not specified, but this is not critical for a simple reauthorization call. Reasonably complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly, including the helpful guidance on how to pass subscriptionId (not as 'id'). The description adds 'no body required' but little parameter-specific meaning beyond what the schema supplies. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (reauthorize) and resource (subscription), and ties it to an explicit trigger: the 'reauthorizationRequired challenge' / lifecycle notification. This clearly distinguishes it from sibling tools like create-subscription, delete-subscription, and update-subscription by its unique trigger condition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool — upon receiving a reauthorizationRequired lifecycle notification — and adds a timing constraint (within the reauthorizationRequiredDateTime window, typically 48h). It doesn't explicitly name alternatives or state when-not-to-use, but the trigger is specific enough that the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-accountA
Remove a Microsoft account from the cache. Accepts email address (e.g. user@outlook.com) or account ID. Use list-accounts to discover available accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Email address or account ID of the account to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the core behavior (removing from cache) but does not mention potential side effects (e.g., whether it invalidates tokens, requires re-authentication, or affects active sessions). For a simple cache operation, this is minimally acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and input format, followed by a useful usage hint. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and no annotations, the description covers what it does, what input to provide, and how to find that input. It could mention post-removal consequences, but given the simplicity, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a clear parameter description ('Email address or account ID of the account to remove'). The tool description adds value by providing an example format (user@outlook.com) and a discovery hint (list-accounts), going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Remove a Microsoft account from the cache') and specifies the accepted input format (email or account ID). It clearly differentiates from sibling tools like list-accounts and select-account by focusing on cache removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use list-accounts to discover available accounts, providing a clear prerequisite. It does not explicitly state when not to use it (e.g., versus logout), but the context of cache removal is inferred, making this adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply-all-mail-messagereply-all-mail-messageADestructive
Reply to all recipients of a message using either JSON or MIME format. When using JSON format:
Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.
If the original message specifies a recipient in the replyTo property, per Internet Message Format (RFC 2822), send the reply to the recipients in replyTo and not the recipient in the from property. When using MIME format:
Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.
Add any attachments and S/MIME properties to the MIME content. This method saves the message in the Sent Items folder. Alternatively, create a draft to reply-all to a message and send it later.
💡 TIP: Reply-all preserving full HTML formatting. The 'comment' field is your reply text.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and openWorldHint=true, but the description adds meaningful behavioral details: it mentions that specifying both comment and body results in HTTP 400, describes replyTo handling per RFC 2822, states that the message is saved in the Sent Items folder, and offers the draft alternative. It does not contradict annotations and provides beyond-annotation context about error conditions and delivery behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear bullet points for JSON and MIME formats, and a tip at the end. It is moderately long but each section conveys necessary information about constraints and usage. The primary purpose is front-loaded, and the alternative draft approach is mentioned early. While it could be slightly trimmed, it remains well-organized and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (two formats, many possible message properties, no output schema), the description covers essential invocation details: required parameters (messageId, body), format-specific requirements, error conditions, and the saving behavior. It does not describe the response structure, but since there is no output schema and the tool returns a message object (per typical Graph API), the lack of explicit return documentation is acceptable. The description is sufficient for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers 80% of parameters with descriptions (e.g., messageId, confirm, includeHeaders). The description adds critical semantics for the 'body' object by clarifying the mutually exclusive constraint between 'Comment' and 'Message' (body) and the replyTo precedence rule. For MIME format, it specifies base64 encoding and header/content requirements, going beyond the schema's generic object definition. This helps the agent avoid common mistakes (e.g., sending both fields).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: 'Reply to all recipients of a message using either JSON or MIME format.' This is specific (replies to all recipients, not just the sender), mentions two explicit format options, and distinguishes it from sibling tools like 'reply-mail-message' (which likely replies to a single recipient) through context. The name is also descriptive, but the description adds the format dimension and clarifies the scope (all recipients).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance by contrasting with creating a draft: 'Alternatively, create a draft to reply-all to a message and send it later.' This gives an alternative for deferred sending. It also differentiates between JSON and MIME usage scenarios, including when to use 'comment' vs 'body'. However, it does not explicitly state when to use this tool over sibling 'reply-mail-message' (single reply) or 'reply-all' vs 'reply' distinctions, relying on the tool name for that differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply-mail-messagereply-mail-messageADestructive
Reply to the sender of a message using either JSON or MIME format. When using JSON format:
Specify either a comment or the body property of the message parameter. Specifying both will return an HTTP 400 Bad Request error.
If the original message specifies a recipient in the replyTo property, per Internet Message Format (RFC 2822), send the reply to the recipients in replyTo and not the recipient in the from property. When using MIME format:
Provide the applicable Internet message headers and the MIME content, all encoded in base64 format in the request body.
Add any attachments and S/MIME properties to the MIME content. This method saves the message in the Sent Items folder. Alternatively, create a draft to reply to an existing message and send it later.
💡 TIP: Reply to an email preserving full HTML formatting. The 'comment' field is your reply text. Do NOT reconstruct the email manually.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description confirms the side effect by noting it 'saves the message in the Sent Items folder' and sends a reply. It also discloses the replyTo precedence rule and the HTTP 400 error condition, adding valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with bullets and sections, front-loading the main purpose. Each sentence carries information; the tip at the end is practical though slightly tangential. It could be tightened, but the structure helps readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mail-reply operation with two formats, multiple constraints, and an alternative workflow, the description covers all key aspects: format selection, parameter constraints, replyTo behavior, save location, draft alternative, and a practical tip. It is complete enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage, the schema already documents most parameters. The description adds essential semantics by explaining the mutual exclusivity of 'Comment' and 'body' in JSON mode, and by detailing the base64-encoded MIME format requirement—details not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reply to the sender of a message') and specifies the two output formats (JSON and MIME). It distinguishes itself from the related create-reply-draft tool by explicitly presenting the draft alternative, making the tool's unique role apparent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance on when to use JSON vs MIME, the constraint of comment vs body, and replyTo handling. It mentions the alternative of creating a draft, but doesn't explicitly compare to reply-all-mail-message or forward-mail-message, leaving some ambiguity about recipient-scope differences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-onedrive-filessearch-onedrive-filesARead-only
Search the hierarchy of items for items matching a query. You can search within a folder hierarchy, a whole drive, or files shared with the current user.
💡 TIP: Searches for files in a drive by name or content. The q parameter searches file names, metadata, and file content. Returns matching driveItems with id, name, webUrl, size, lastModifiedDateTime. Use list-drives first to get the drive-id.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Value for the 'q' path segment. | |
| top | No | 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. | |
| skip | No | Items to skip for pagination. Not supported with $search. | |
| count | No | Set true to enable advanced query mode (ConsistencyLevel: eventual). Required for complex $filter on flag/flagStatus or contains(). | |
| expand | No | Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with "Parsing OData Select and Expand failed", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead. | |
| filter | No | OData filter expression. Add $count=true for advanced filters (flag/flagStatus, contains()). Cannot combine with $search. | |
| search | No | KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter. | |
| select | No | Comma-separated fields to return, e.g. id,subject,from,receivedDateTime | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| orderby | No | Sort expression, e.g. receivedDateTime desc | |
| skiptoken | No | Next page: the @odata.nextLink from the previous response. Keep the other arguments the same. | |
| fetchAllPages | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so the safety profile is covered. The description adds behavioral detail by stating the q parameter searches file names, metadata, and content, and that the response includes id, name, webUrl, size, lastModifiedDateTime. It does not contradict the annotations, and it adds useful context about what the search affects and returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences plus a tip, with the main purpose front-loaded. Every sentence earns its place: purpose, scope, search semantics, return fields, and prerequisite. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with 14 parameters, the schema already documents parameters thoroughly. The description covers the essential usage context: what can be searched, what is returned, and how to obtain the required driveId. The absence of an output schema is mitigated by listing return fields, and the read-only nature is already annotated. This is sufficiently complete for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all 14 parameters (100% coverage), the description enriches the otherwise terse q parameter schema ('Value for the q path segment') by explaining it searches file names, metadata, and content. It also reinforces the driveId prerequisite. This adds meaning beyond the schema baseline of 3, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Search the hierarchy of items for items matching a query.' It further clarifies scope (folder hierarchy, whole drive, shared files) and notes the q parameter searches file names, metadata, and content. This clearly distinguishes it from sibling listing tools such as list-folder-files or get-drive-item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical guidance in the TIP: 'Use list-drives first to get the drive-id,' establishing a prerequisite. It also explains the search semantics (by name or content) and returned fields, which tells the agent when this tool is appropriate. It lacks an explicit 'when not to use' or alternative comparison, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select-accountA
Select a Microsoft account as the default. Accepts email address (e.g. user@outlook.com) or account ID. Use list-accounts to discover available accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Email address or account ID of the account to select |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action 'select as default,' which implies a persistent state change, but does not disclose side effects (e.g., whether the previous default is replaced, whether authentication is required, or if the change is reversible). For a state-modifying tool with no annotation coverage, this is a moderate gap—not misleading, but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose is front-loaded, followed by accepted formats and a pointed reference to a sibling. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description covers purpose, accepted input, and a discovery path. There are no nested objects or complex edge cases to disclose, so it is complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the parameter description already states 'Email address or account ID'). The description adds a concrete example (user@outlook.com) and a discovery mechanism (use list-accounts), which goes slightly beyond the schema. It adds value by giving the agent a way to find valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Select a Microsoft account as the default.' It also specifies the accepted identifier forms (email or account ID) and provides a concrete example. This clearly differentiates it from siblings like list-accounts (which discovers) and logout (which ends a session).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use list-accounts to discover available accounts, which routes the agent to the right discovery tool. However, it does not state when not to use this tool (e.g., when needing to log in or out) or list alternatives beyond list-accounts. The guidance is clear for the typical flow but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-draft-messagesend-draft-messageBDestructive
Send an existing draft message. The draft message can be a new message draft, reply draft, reply-all draft, or a forward draft. This method saves the message in the Sent Items folder. Alternatively, send a new message in a single operation.
💡 TIP: No request body needed — just call with the message ID. Draft must exist in Drafts folder.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint true and readOnlyHint false, so the description is not the sole source of side-effect info. It adds that the message is saved to Sent Items and notes no request body needed. However, it doesn't mention irreversibility or what happens to the draft after sending, which would be expected given the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a tip, all containing useful information. The primary action is front-loaded, and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward send operation, the description covers core requirements but omits output format, error cases (e.g., missing draft), and any post-send behavior. With no output schema, more detail on expected response or failure modes would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all parameters described. The description reinforces that only messageId is needed and that the draft must exist, which is helpful but adds little beyond the existing parameter descriptions. Baseline is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Send an existing draft message' and enumerates the draft types (new, reply, reply-all, forward). It distinguishes from sibling mail tools by focusing on drafts, but the 'Alternatively, send a new message in a single operation' clause introduces slight ambiguity about the tool's primary scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like send-mail or create-* draft/send flows. The tip about drafting presence ('Draft must exist in Drafts folder') is a constraint, not a selection criterion. It doesn't mention when to choose this over other send operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-mailsend-mailADestructive
Send the message specified in the request body using either JSON or MIME format. When using JSON format, you can include a file attachment in the same sendMail action call. When using MIME format: This method saves the message in the Sent Items folder. Alternatively, create a draft message to send later. To learn more about the steps involved in the backend before a mail is delivered to recipients, see here.
💡 TIP: CRITICAL: Do not try to guess the email address of the recipients. Use the list-users tool to find the email address of the recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds valuable behavior: it explains that MIME format saves the message in Sent Items, and that JSON format supports file attachments in the same call. These specifics go beyond the annotations and help the agent anticipate consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise but contains a non-actionable link ('see here') and an irrelevant backend-information sentence. The critical tip is highlighted and front-loaded, which is good. However, the link is a dead end and the backend note adds little for an agent. Overall it is acceptable but not tightly focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a very large, nested schema, the description covers the essential context: format options, attachment handling, default SaveToSentItems behavior, and the practical tip about recipient addresses. It does not describe response format, but there is no output schema, and the confirm parameter is self-documented in the schema. The description is sufficient for safe and effective invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema description coverage, the schema already documents many fields. The description adds meaning that the schema lacks by explaining the two request body formats (JSON vs MIME) and their implications (attachment support, Sent Items behavior). The tip about using list-users for recipient addresses also guides parameter construction, going beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Send' and the resource 'the message specified in the request body.' It distinguishes this tool from sibling mail actions by explicitly mentioning JSON vs MIME formats and the alternative of creating a draft. The purpose is unambiguous and unique among the many mail-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: 'Send the message' and when to consider creating a draft ('Alternatively, create a draft message to send later'). It also gives a crucial operational guideline: 'Do not try to guess the email address of the recipients. Use the list-users tool.' This effectively routes the agent to a specific workflow, though it doesn't explicitly compare to send-draft-message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snooze-calendar-event-remindersnooze-calendar-event-reminderADestructive
Postpone a reminder for an event in a user calendar until a new time.
💡 TIP: Postpones a triggered event reminder. Body: { NewReminderTime: { dateTime (ISO 8601), timeZone (IANA or Windows, e.g. 'Pacific Standard Time') } }. The reminder will re-fire at the new time.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation nature is known. The description adds that the reminder re-fires at the new time, which is useful behavioral context. It doesn't contradict annotations, but it also doesn't elaborate on side effects or confirmation requirements beyond what schema and annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The purpose is front-loaded, and the tip block is concise. Every sentence earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations and a detailed input schema, the description covers the essential action and body format. It doesn't explain the confirm gate, includeHeaders, or excludeResponse, but these are generic and already in the schema. The absence of an output schema means the description isn't required to describe return values. Overall, it is adequately complete for an agent to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, and the core body structure (NewReminderTime with dateTime and timeZone) is already documented. The description adds a note about timeZone being IANA or Windows, which slightly clarifies the schema's example, but it does not add substantial new meaning. Thus, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (postpone) and the resource (a reminder for an event), and the phrase 'triggered event reminder' distinguishes it from related actions like dismissal. This makes the purpose unambiguous and differentiates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use it: for a triggered reminder that should re-fire later. It implies the alternative (dismissing) is different but does not explicitly name it or give exclusion criteria. Still, the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sort-excel-rangesort-excel-rangeCDestructive
Sort an Excel range.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, indicating a mutable operation, and the description adds no additional behavioral context. It does not explain whether sorting modifies data in place, whether it is reversible, or whether confirmation is needed. The description fails to capitalize on the lower bar set by annotations to provide useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-sentence description is extremely concise and front-loaded, but it is under-specified rather than appropriately sized. While there is no fluff, the brevity comes at the cost of essential information required for correct usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of sorting an Excel range (multiple potential criteria, sorting in place, header handling), the description is woefully incomplete. There is no mention of return values, side effects, or required parameters beyond generic placeholders. The absence of an output schema and sparse description leaves even basics unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 86% of parameters with descriptions, but the critical 'body' parameter (which likely contains sort criteria) is only described as having an 'id' and allows additional properties. The description does not explain how to specify sort columns, order, or other options. With schema coverage high, baseline is 3, but the description adds nothing about the core sorting parameters, so a 2 is warranted as it fails to fill the domain-specific gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Sort an Excel range.' clearly states the verb (sort) and resource (Excel range), making the tool's basic purpose unambiguous. It is distinguishable from range operations like get, update, or clear by the specific action of sorting. However, it does not differentiate itself from potential sibling tools like inserting or formatting ranges, though those have distinct names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites, required parameters like the sort key or order, or preconditions such as selecting a range. An agent would have to inspect the schema and infer usage, which is insufficient for a nuanced operation like sorting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tentatively-accept-calendar-eventtentatively-accept-calendar-eventADestructive
Tentatively accept the specified event in a user calendar. If the event allows proposals for new times, on responding tentative to the event, an invitee can choose to suggest an alternative time by including the proposedNewTime parameter. For more information on how to propose a time, and how to receive and accept a new time proposal, see Propose new meeting times.
💡 TIP: Tentatively accepts a meeting invitation. Optional body: { sendResponse: true, comment: 'I might be able to attend.' }. Use proposedNewTime to suggest an alternative: { proposedNewTime: { start: { dateTime, timeZone }, end: { dateTime, timeZone } } }.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare `destructiveHint: true` and `readOnlyHint: false`, indicating this is a write operation. The description adds useful context: the optional body parameters (`sendResponse`, `comment`), the conditional ability to propose a new time, and an example. However, it does not disclose whether the action is reversible, what the event status becomes, or any side effects beyond sending a response. Since annotations already cover the mutation nature, the description adds some value but remains thin on deeper behavioral consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose, with a main explanatory paragraph and a 'TIP' section containing examples. Each sentence adds actionable information: the core action, the proposal condition, and concrete usage examples. It is more than two sentences but not bloated; the structure is logical with the tip reinforcing the main text. Some redundancy exists (e.g., the phrase 'Tentatively accepts a meeting invitation' echoes the first line), but overall it is efficiently organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has nested objects, optional proposals, a confirm gate, and multiple parameters. The description covers the primary purpose, the optional new-time feature, and provides examples for the most complex part (body). It also flags the confirm gate requirement. It does not describe the response format (no output schema) or specify error conditions (e.g., if the event doesn't allow proposals), but given the absence of an output schema and the moderate complexity, the description provides enough context for an agent to invoke it correctly. A reference to external docs fills the gap for edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so many parameters already have descriptions. The description adds significant value beyond the schema: it provides concrete JSON examples for the optional body and proposedNewTime, clarifies that `eventId` must be passed as 'eventId' not 'id', and explains the `confirm` gate. It also disambiguates the nested `proposedNewTime` structure. This extra guidance compensates for the 20% undocumented parameters (like `includeHeaders` and `excludeResponse` are self-explanatory but not covered).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Tentatively accept the specified event in a user calendar.' It names the verb, resource (calendar event), and the specific state change (tentative acceptance). It indirectly distinguishes from siblings like `accept-calendar-event` and `decline-calendar-event` by its name and action, and the mention of proposing alternative times adds unique purpose. This is a specific, unambiguous verb+resource combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is appropriate: 'Tentatively accepts a meeting invitation' and describes the optional new-time proposal behavior. It references external documentation for proposing times, but does not explicitly state when to use alternatives like `accept-calendar-event` or `decline-calendar-event`. The context is clear but exclusions against siblings are not spelled out, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unmerge-excel-rangeunmerge-excel-rangeADestructive
Unmerge an Excel range.
💡 TIP: Unmerge any merged cells within the given range back into individual cells. No request body. Inverse of merge-excel-range.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's responsibility is to add context beyond these. It adds 'No request body' and the inverse relationship, which is useful. However, it omits potential data consequences (e.g., unmerging retains only top-left cell values), which would be valuable for a destructive operation. It provides some additional context but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a concise tip, with the action front-loaded ('Unmerge an Excel range.') and the clarifying tip immediately following. There is no fluff or redundant information; every word contributes to understanding the tool's purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple operation with well-documented parameters and annotations covering destructiveness, the description is largely complete. It clearly states what the tool does and references its inverse. A minor gap is the lack of explanation about data preservation after unmerging, but that is not critical given the annotations and the straightforward nature of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description does not add parameter-specific meaning beyond the vague 'given range', which loosely maps to the 'address' parameter. Since the schema carries the parameter documentation burden, the description adds minimal value, justifying the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (unmerge Excel range) and clarifies that it reverses merged cells into individual cells, explicitly calling out the inverse relationship with merge-excel-range. It also notes 'No request body', which further clarifies the operation's scope. This distinguishes it from sibling tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly provides usage guidance by naming the inverse tool (merge-excel-range), allowing an agent to understand when to use this tool (to unmerge) vs the sibling (to merge). It does not explicitly list exclusions or alternative scenarios, but the inverse reference gives clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-calendarupdate-calendarBDestructive
Update a calendar.
💡 TIP: Updates a calendar's properties. Body: { name: 'New Name', color: 'lightBlue' }. Cannot update the default calendar's name.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description does not need to repeat that. It adds a specific constraint—'Cannot update the default calendar's name'—which is useful behavioral information. However, it does not disclose other behavioral aspects like permission requirements, side effects (e.g., affecting events), or response format, leaving the agent to infer these from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two sentences including the tip), which makes it concise and front-loaded with the primary action. The example body is placed in the tip, providing practical value without adding bulk. However, the tip graphic (💡 TIP:) is slightly informal but does not hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—5 parameters, nested objects for body, and a rich schema—the description is overly terse. It does not explain how to construct the body beyond a trivial example, nor does it clarify the calendarId requirement or what the tool returns (no output schema). The description leaves critical information to the schema, which is adequate but not sufficient for an agent to confidently invoke the tool correctly without consulting the schema in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so most parameters are documented in the schema. The description adds a concrete example body: { name: 'New Name', color: 'lightBlue' }, which helps clarify the expected structure but does not explain any parameter that is not already described. It also lacks guidance on the calendarId parameter, though the schema provides a note about passing it under 'calendarId'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update a calendar' and expands with 'Updates a calendar's properties,' which is a specific verb+resource. It distinguishes from siblings like create-calendar and delete-calendar by focusing on updating existing calendars, though it doesn't explicitly contrast with update-calendar-event or update-specific-calendar-event beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives or when not to use it. The only constraint mentioned is 'Cannot update the default calendar's name,' which is a restriction but not usage context. The description does not explain prerequisites, such as needing to fetch the calendarId first, or scenarios where creating a new calendar would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-calendar-eventupdate-calendar-eventADestructive
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.
💡 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds the concrete consequence that setting attendees replaces the entire attendee list, plus the DST-resolution nuance for recurring events — meaningful behavioral detail beyond the generic annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and prerequisite, followed by focused guidance. The TIP/WARNING block with emoji and capitalization is slightly noisy but each sentence carries actionable content, so waste is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential gotchas (ID source, time-zone semantics, attendee-list replacement). It could say more about the confirm gate or partial-update behavior, but it is largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (~80%), so the baseline is 3. The description still adds value: it clarifies eventId sourcing ('ID from get-calendar-view or list-calendar-events') and explains the nested {dateTime, timeZone} structure and which time zone to choose, going beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Update an event') and scopes it to 'the default calendar,' which cleanly distinguishes it from the sibling update-specific-calendar-event. An agent can identify the operation and its target calendar without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong context: the prerequisite eventId and where to obtain it (get-calendar-view/list-calendar-events), conditional time-zone guidance (UTC for one-offs, organizer zone for recurring), and a warning to look up recipient emails via list-users rather than guessing. It stops short of explicitly contrasting with the sibling update-specific-calendar-event or create/delete alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-contact-folderupdate-contact-folderADestructive
Update the properties of contactfolder object.
💡 TIP: Updates a contact folder. Body: { displayName?: 'New name', parentFolderId?: '' } — both displayName (rename) and parentFolderId (move) are writable. The default 'Contacts' folder may not be renameable. Get the folder id via list-contact-folders.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| contactFolderId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the agent knows this is a write operation. The description adds useful behavioral context: it notes that the default 'Contacts' folder may not be renameable, and clarifies that both displayName and parentFolderId are writable. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of a main sentence, a tip, and a body example. It is front-loaded with the core purpose. There is slight redundancy between 'Update the properties of contactfolder object' and 'Updates a contact folder', but overall it is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with nested objects and multiple parameters, the description covers the essential usage: which fields are writable and how to obtain the folder ID. It does not explain the response format or the confirm parameter, but these may be covered by common patterns given no output schema is expected. The description provides enough context for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so most parameters have descriptions in the schema. The description adds value by explicitly stating the body structure { displayName?: 'New name', parentFolderId?: '<id>' } and identifying the writable fields. It also instructs how to obtain the contactFolderId (via list-contact-folders), which clarifies the path parameter. This goes beyond the schema's generic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and a specific resource ('contactfolder object'). It clearly identifies what the tool does. Sibling tools like update-outlook-contact, delete-contact-folder, and create-contact-folder are distinct, and the description makes it clear this is for updating contact folders, not contacts or other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a helpful tip to get the folder id via list-contact-folders, which is a prerequisite for the contactFolderId parameter. However, it does not explicitly state when to use this tool versus alternatives (e.g., when to use create-contact-folder vs update). The guidance is implicit based on the tool name, but not explicit about exclusions or alternative selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-excel-rangeupdate-excel-rangeADestructive
Update an Excel range.
💡 TIP: Set cell values, formulas, or number format on any range — does NOT require the worksheet to be a formal Excel table. Body: { values: [['v1','v2','v3']] } for a single row, or [['a','b'],['c','d']] for multi-row. Use this for append (target the next empty row's address, e.g. 'A172:H172'), update (target a single cell like 'H42'), or prepend-style edits (read existing, concatenate, write back). Number of inner-array values must match the column count of the address.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| address | Yes | Value for the 'address' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookWorksheetId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive=true, so the description need not repeat. It adds value by disclosing the tool can set values, formulas, or number format, and clarifies it works on any range (not just tables). The constraint about inner-array count matching column count is also a behavioral detail. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise (~70 words) and well-organized: starts with purpose, then a tip, then usage patterns, then a constraint. Each sentence carries value, though a slight trim could improve. It is front-loaded with the main verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers the critical aspects for invocation: what it does, how to format the body, the address format, and usage patterns. It does not explain the confirm gate, but that is documented in the schema parameter. It omits response details but that is acceptable for a mutation tool without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions for parameters are mostly generic ('Value for the address path segment'), so the description compensates by explaining the body format ({ values: [['v1','v2','v3']] }) and giving address examples. It also clarifies the column-count requirement. This adds meaningful context beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an Excel range' and expands on what updates are possible (values, formulas, number format). It explicitly notes it does NOT require a formal Excel table, distinguishing it from table-specific tools like update-excel-table-row. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage patterns: append (target next empty row), update (single cell), and prepend-style edits (read, concatenate, write back). It provides address examples like 'A172:H172' and 'H42'. However, it does not explicitly name alternative sibling tools or state when NOT to use it beyond the table implication, so it falls short of full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-excel-table-rowupdate-excel-table-rowADestructive
Update an Excel table row.
💡 TIP: Update a single row in a formal Excel table by zero-based row index. Body: { values: [[...]] } with one inner array matching the column count.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| index | Yes | Value for the 'index' path segment. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| workbookTableId | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds useful behavioral context: the zero-based row index and the exact body format ({ values: [[...]] }). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise lines, front-loaded with the purpose and followed by a focused tip. Every word contributes value; no fluff or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update operation with no output schema and high schema coverage, the description is adequate. It covers the essential body format and indexing. A minor gap: it does not explicitly state that the row contents are fully replaced (versus partial updates), but this is reasonably inferred from the term 'update' and the body structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), so most parameters are self-explanatory, but the body parameter is an untyped object in the schema. The description compensates by specifying the required structure ('values' array with one inner array matching column count) and clarifying that 'index' is zero-based.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update an Excel table row') and the resource (a single row in a formal Excel table). It also clarifies the indexing scheme (zero-based) and the specific body structure, which differentiates it from sibling tools like add-excel-table-rows and delete-excel-table-row.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying an existing row in a formal Excel table, but it does not explicitly contrast with sibling tools or provide conditions like 'use this instead of add-excel-table-rows when modifying existing data.' The tip adds operational detail but no alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-focused-inbox-overrideupdate-focused-inbox-overrideADestructive
Change the classifyAs field of an override as specified. You cannot use PATCH to change any other fields in an inferenceClassificationOverride instance. If an override exists for a sender and the sender changes his/her display name, you can use POST to force an update to the name field in the existing override. If an override exists for a sender and the sender changes his/her SMTP address, deleting the existing override and creating a new one with the new SMTP address is the only way to 'update' the override for this sender.
💡 TIP: Updates the classifyAs field of an existing override. Body: { classifyAs: 'focused' } or { classifyAs: 'other' }. Per Graph API, PATCH cannot change senderEmailAddress — to change the SMTP address, delete and recreate the override. To rename the display name only, POST a new override with the same SMTP address (it will overwrite the name).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| inferenceClassificationOverrideId | Yes | Value for the 'inferenceClassificationOverrideId' path segment. Pass it under the name 'inferenceClassificationOverrideId', not as 'id'. Use the 'id' field of the inference classification override object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description need not re-state mutation. It adds valuable behavioral constraints: this PATCH operation cannot change senderEmailAddress, and it explains the workaround for display name and SMTP changes. It also mentions the Graph API restriction. This goes beyond annotation-provided info, though it doesn't describe side effects or confirmation requirements, which are partially covered by the confirm parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two paragraphs plus a tip block, which is slightly verbose but each sentence earns its place. The primary purpose is stated first, followed by alternatives. The tip block condenses the key points. It could be tightened, but it's structured and front-loaded enough to be easily scanned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential context: what field can be updated, what cannot, and how to achieve related updates. It does not mention pagination or error handling, but these are not critical for an update operation. The confirm gate is documented in the schema. Overall, an agent has enough to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so most parameters are described in the schema. The description adds concrete payload examples: "Body: { classifyAs: 'focused' } or { classifyAs: 'other' }", which clarifies the exact format expected. It also explains the meaning of inferenceClassificationOverrideId sufficiently in the schema, and the description reinforces the classification value enum. This adds value beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Change the classifyAs field of an override as specified.' It uses a specific verb (change/update) and resource (override), and distinguishes itself from siblings like create-focused-inbox-override and delete-focused-inbox-override by being the update operation. The explicit focus on classifyAs and the prohibition on changing other fields make its scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: to update classifyAs. It also names alternatives for other scenarios: 'you can use POST to force an update to the name field' and 'deleting the existing override and creating a new one' for SMTP changes. This clearly routes agents to the correct tool based on the desired mutation, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-mailbox-settingsupdate-mailbox-settingsCDestructive
Enable, configure, or disable one or more of the following settings as part of a user's mailboxSettings: When updating the preferred date or time format for a user, specify it in respectively, the short date or short time format. When updating the preferred time zone for a user, specify it in the Windows or Internet Assigned Numbers Authority (IANA) time zone (also known as Olson time zone) format. You can also further customize the time zone as shown in example 2 below.
💡 TIP: Updates mailbox settings. Common use: configure Out-of-Office (automatic replies). Body example: { automaticRepliesSetting: { status: 'scheduled', scheduledStartDateTime: { dateTime: '2026-03-28T17:00:00', timeZone: 'Eastern Standard Time' }, scheduledEndDateTime: { dateTime: '2026-04-01T08:00:00', timeZone: 'Eastern Standard Time' }, internalReplyMessage: 'I am OOO.', externalReplyMessage: 'I am out of office.' } }. Status values: disabled, alwaysEnabled, scheduled.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true and readOnlyHint: false, so the mutation aspect is covered. The description adds minimal behavioral context beyond that: it mentions 'Enable, configure, or disable' but does not discuss side effects, permission requirements, reversibility, or the confirm gate. The example is helpful but does not disclose consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose and runs together multiple concerns. It starts with a general statement, then dives into format specifics, and ends with a tip and example. The structure is not front-loaded with the core purpose; it mixes purpose, formatting rules, and an example without clear organization. It could be trimmed significantly without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, destructive tool with nested objects and no output schema, the description is incomplete. It does not mention the confirm parameter, error handling, required permissions, or what the response looks like. It also lacks guidance on how to use the other parameters (like workingHours, delegateMeetingMessageDeliveryOptions). The example covers only OOO, leaving other settings under-explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so most parameters are already described. The description adds crucial format requirements for date/time and time zone (short date/short time, Windows or IANA formats) that are not in the schema, and provides a full example body for Out-of-Office, significantly clarifying usage of nested objects. This goes beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enables, configures, or disables mailbox settings, and gives specific examples of settings (date/time, time zone, OOO). It is clear what the tool does, though it does not explicitly differentiate from the read-only sibling get-mailbox-settings; the purpose is evident but not explicitly contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that get-mailbox-settings is the read counterpart, nor does it state any prerequisites or exclusions. The only usage nuance is format guidance, not selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-mail-folderupdate-mail-folderADestructive
Update the properties of mailfolder object.
💡 TIP: Renames a mail folder by updating its displayName. Use list-mail-folders to find the folder ID.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| mailFolderId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, signaling a write operation. The description adds no extra behavioral context (e.g., what happens to existing properties, whether changes are reversible). It's consistent but doesn't go beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The main purpose is front-loaded, and the tip is immediately useful. It's concise and structured for quick comprehension without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex body schema with many properties, the description plus the schema covers what an agent needs: required fields are clear, and the tip provides a practical workflow. The only minor gap is not explicitly stating which properties are non-updatable (e.g., isHidden is creation-only), but that's already conveyed in the schema property descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%), and the parameter descriptions are rich—especially mailFolderId, which clarifies naming convention and origin. The tip further highlights displayName as a key property for renaming, adding semantic value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update the properties of mailfolder object,' which identifies the verb and resource. The tip adds a concrete use case (renaming via displayName). However, it doesn't explicitly distinguish itself from sibling update tools like update-calendar-event or update-mail-rule, though the resource is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tip advises using list-mail-folders to find the folder ID, which is a helpful prerequisite. It also implies this tool is for renaming or updating folder properties. However, it doesn't explicitly state when NOT to use it (e.g., use create-mail-folder for new folders, delete-mail-folder for deletion) or compare with other update tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-mail-messageupdate-mail-messageADestructive
Update an existing Outlook email message by its message ID — for example mark it read or unread (isRead), flag it (flag), change its categories, importance, or edit a draft's subject, body, or recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| messageId | Yes | Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the mutation nature is known. The description adds that certain fields (subject, body, recipients) are only editable for drafts, which is useful nuance. It does not mention other side effects like confirmation requirements or authorization needs, but the schema covers the confirm parameter. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence that front-loads the action and resource, then lists examples. No redundant terms or vague filler. Efficiently conveys the core purpose without unnecessary length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has complex nested objects and many parameters, but the description gives enough to understand what it does and what fields are relevant. It lacks explicit details on limitations (e.g., sent messages cannot have body/recipients changed, requiring draft status) and does not mention the return format, though no output schema exists. For a mutation tool, it is adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters. The description adds semantic examples (isRead, flag, categories, importance) that clarify what kind of updates are typical, but it does not explain the structure of the body object beyond that. It adds modest value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('update an existing Outlook email message by its message ID') and lists concrete examples of what can be changed (read status, flag, categories, importance, draft content). This clearly distinguishes it from creation, sending, or deletion tools among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when the tool is appropriate (updating existing messages) and implies it is not for creation or sending. It does not explicitly name alternatives or state when-not-to-use, but the enumerated use cases (marking read/unread, flagging, editing drafts) give an agent enough to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-mail-ruleupdate-mail-ruleADestructive
Change writable properties on a messageRule object and save the changes.
💡 TIP: Updates an existing message rule. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules. Send only the properties to change. Common use: { isEnabled: false } to disable a rule, or update conditions/actions.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| mailFolderId | Yes | 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. | |
| messageRuleId | Yes | Value for the 'messageRuleId' path segment. Pass it under the name 'messageRuleId', not as 'id'. Use the 'id' field of the message rule object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint: true and readOnlyHint: false, which the description aligns with ('change', 'save'). The description adds meaningful behavior beyond annotations: it clarifies PATCH semantics ('send only the properties to change'), and notes that only writable properties are affected. No contradiction. The confirm-gate behavior is documented in the schema, not the description, but that's acceptable given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a well-placed tip. The main purpose is stated first, followed by practical guidance. The tip is a bit long but packed with useful info (how to get folder ID, partial updates, example). No fluff or repetition; it's efficiently organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the large, detailed schema and no output schema, the description covers the essentials: what it does, how to get the folder ID, partial-update behavior, and a common scenario. It doesn't mention the confirm gate or return fidelity (excludeResponse, includeHeaders), but those are schema-level. For an update tool with a rich schema, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83% (high), so the schema already explains most parameters. The description adds value by explaining how to use the body: 'Send only the properties to change' and gives a common-use example ({ isEnabled: false }). It also reinforces the need for mailFolderId and messageRuleId via the tip. This goes beyond the schema's basic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('change writable properties'), resource ('messageRule object'), and action ('save the changes'). It clearly distinguishes from create-mail-rule (existing rule) and delete-mail-rule, and the sibling list confirms these alternatives exist. The agent knows exactly what this tool does and when to pick it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'Updates an existing message rule', 'Use the Inbox folder ID (get it from list-mail-folders) for inbox rules', 'Send only the properties to change'. It also provides a concrete example (disabling a rule). It does not explicitly name alternatives (e.g., create-mail-rule) but implies the distinction via 'existing', which is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-my-calendar-permissionupdate-my-calendar-permissionADestructive
Update my calendar permission.
💡 TIP: Changes the role (permission level) granted to an existing share recipient or delegate. Body: { role: 'read' | 'write' | 'delegateWithoutPrivateEventAccess' | 'delegateWithPrivateEventAccess' }. Only the role property is writable — to change the recipient's email or other properties, delete and recreate via delete-my-calendar-permission + create-my-calendar-permission. Get the permission id via list-my-calendar-permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| calendarPermissionId | Yes | Value for the 'calendarPermissionId' path segment. Pass it under the name 'calendarPermissionId', not as 'id'. Use the 'id' field of the calendar permission object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds useful behavioral context beyond annotations: it clarifies that only the role property is writable (other body fields ignored) and provides an alternative workflow for changing other fields. Annotations already indicate destructiveness (destructiveHint=true), and the description does not contradict this. It adds value by explaining the constraint and the delete+recreate path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise and front-loaded with the purpose. The tip block is organized but the misleading role list adds unnecessary length and confusion. It is not overly verbose, but the inaccurate enumeration wastes space and could mislead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core workflow, the writable-only-role constraint, and the alternative for changing other properties. It does not describe the response (no output schema) but that is not expected. The main gap is the incomplete role list, which undermines completeness for valid use cases. The confirm gate is described in the schema, so that is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% and the schema already documents parameters, but the description actively misleads: it lists only four role values ('read', 'write', 'delegateWithoutPrivateEventAccess', 'delegateWithPrivateEventAccess') while the schema allows eight enum values including 'none', 'freeBusyRead', 'limitedRead', and 'custom'. This false restriction could prevent an agent from using valid roles. The statement 'Only the role property is writable' is helpful, but the role list error is a significant negative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Update my calendar permission') with a specific verb and resource, and distinguishes itself by mentioning 'existing share recipient or delegate' and contrasting with delete+create for other properties. It differentiates from sibling tools like delete-my-calendar-permission and list-my-calendar-permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (update an existing permission) and when not (to change email or other properties, delete and recreate). It also provides the prerequisite of getting the permission id via list-my-calendar-permissions. No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-outlook-contactupdate-outlook-contactBDestructive
Update the properties of a contact object.
💡 TIP: emailAddresses array is replaced entirely — include all addresses, not just new ones.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| contactId | Yes | Value for the 'contactId' path segment. Pass it under the name 'contactId', not as 'id'. Use the 'id' field of the contact object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the mutation nature is known. The description adds one specific, non-obvious behavioral detail: the emailAddresses array is replaced entirely. This is valuable because it warns against partial updates. However, it does not disclose other side effects (e.g., impact on unmentioned fields) or the confirm gate, though that is covered in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a two-sentence declaration with a front-loaded purpose and a practical tip. Every word earns its place, with no fluff or redundancy. The structure is optimal for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's complexity (nested objects, many optional fields, destructive nature), the description is minimal. It lacks guidance on when to use it, what happens on partial updates, error handling, or expected response format. The tip helps but does not make the tool complete for an agent to invoke correctly without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema description coverage, most parameters are already documented. The description adds meaning specifically for emailAddresses by clarifying its replacement semantics, which is beyond the schema. It does not add semantics for other parameters, but the schema covers them adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Update the properties of a contact object.' It distinguishes from create/delete/get by the update action, and the tool name makes the 'Outlook' scope explicit. It could be more specific about the contact type (e.g., Outlook contact) but is unambiguous enough for an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like create-outlook-contact, delete-outlook-contact, or other update tools. It does not mention prerequisites, conditions, or which scenarios are appropriate. The only extra content is a tip about emailAddresses, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-planner-bucketupdate-planner-bucketADestructive
Update the properties of plannerbucket object.
💡 TIP: CRITICAL: Requires If-Match header with ETag from get-planner-bucket (use includeHeaders=true).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| If-Match | Yes | ETag value. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication | |
| plannerBucketId | Yes | Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds the crucial behavioral requirement of the If-Match header for optimistic concurrency, which is not conveyed by annotations. It does not contradict any annotations, and the ETag prerequisite is valuable for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one action sentence and a critical tip. The tip is front-loaded and clearly highlights the most important operational detail. No unnecessary words, and the use of emoji is decorative but does not hinder clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with nested objects, 6 parameters, and no output schema, the description is minimal. It covers the ETag requirement, which is essential, but does not explain whether the body replaces the whole bucket or is a partial update, nor what the response contains. The schema provides some context, but the description could add update semantics and expected return behavior. The lack of this info leaves some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so most parameters are described. The description enriches two parameters: If-Match (explicitly tied to the ETag from get-planner-bucket) and includeHeaders (mentioned as the means to obtain that ETag). This goes beyond the schema's generic 'ETag value' and 'Include response headers' descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update the properties of plannerbucket object', specifying the verb 'update' and the resource. It distinguishes this from sibling tools like create-planner-bucket and delete-planner-bucket by the action, and from get-planner-bucket by the mutation intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a critical usage guideline: it requires an If-Match header with an ETag from get-planner-bucket and tells the agent to use includeHeaders=true. This is practical, action-oriented guidance. However, it does not explicitly contrast this tool with alternatives, though the name and context imply it is for updating an existing bucket rather than creating or deleting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-planner-taskupdate-planner-taskADestructive
Update the properties of plannerTask object.
💡 TIP: CRITICAL: Requires If-Match header with the task's @odata.etag value, otherwise returns 412 Precondition Failed. Get the ETag from get-planner-task with includeHeaders=true. Priority is 0-10 (lower = higher priority); Planner's own UI presets are 1=Urgent, 3=Important, 5=Medium, 9=Low.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| If-Match | Yes | ETag value. | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: the exact failure mode (412 Precondition Failed) when the ETag is missing, and where to obtain the ETag. It does not describe reversibility or what happens to unspecified properties.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, followed by the critical constraint and priority semantics. Both sentences are useful, though the priority mapping duplicates schema text rather than adding new value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the single biggest failure mode (ETag/If-Match) and the priority domain. The confirm-gate parameter and other body fields are documented in the schema, so coverage is adequate, though it could note the destructive nature more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), which sets a baseline of 3, but the description adds genuine workflow meaning for the If-Match parameter by naming its source (get-planner-task + includeHeaders=true). The priority 0-10 mapping largely restates the schema's own priority description, so it earns only partial credit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Update the properties of plannerTask object'), which is clearly distinguishable from read-oriented siblings like get-planner-task. However, it does not distinguish itself from the closely named update-planner-task-details, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete prerequisite and workflow: the If-Match header is required, and the ETag must be fetched via get-planner-task with includeHeaders=true. It stops short of stating when to use this tool versus the sibling update-planner-task-details, which handles the details object.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-planner-task-detailsupdate-planner-task-detailsADestructive
Update the properties of plannerTaskDetails object.
💡 TIP: CRITICAL: Requires If-Match header with ETag from get-planner-task-details (use includeHeaders=true). Checklist items use GUID keys: {"checklist": {"": {"title": "...", "isChecked": false}}}.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| If-Match | Yes | ETag value. | |
| plannerTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive (destructiveHint=true), and the description doesn't contradict that. It adds behavioral context beyond annotations: the ETag requirement and the GUID-key structure for checklist items. This tells the agent about a precondition and a format detail not present in the schema, enriching the behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and efficient. Two sentences plus a focused TIP. The purpose is front-loaded, and the critical prerequisite is highlighted in the TIP. No wasted words, and the critical details are presented without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex update operation with nested objects, the description covers the vital ETag requirement and checklist format. It doesn't explain every possible property, but those are in the schema. The absence of an output schema means return format is not needed. The description is sufficient for an agent to call it correctly, though it could mention that the operation affects only details, not the main task object, but the name implies that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so parameters are mostly documented. The description adds value by explaining the checklist GUID format and the If-Match/ETag usage, which are not fully covered in the schema. It helps the agent correctly construct the body and headers beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Update the properties of plannerTaskDetails object', which clearly identifies the verb (update), the resource (plannerTaskDetails), and distinguishes it from update-planner-task by specifying 'details'. It lacks an explicit contrast with siblings, but the resource name is specific enough to avoid ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides critical usage guidance: it requires an If-Match header with the ETag from get-planner-task-details and instructs using includeHeaders=true. This indicates a prerequisite step and clarifies when to fetch the ETag first. It doesn't explicitly mention alternatives, but the ETag requirement effectively routes the agent to the right predecessor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-specific-calendar-eventupdate-specific-calendar-eventADestructive
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.
💡 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| eventId | Yes | Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph. | |
| calendarId | Yes | Value for the 'calendarId' path segment. Pass it under the name 'calendarId', not as 'id'. Use the 'id' field of the calendar object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint and openWorldHint, so safety is covered, but the description adds real behavioral context the annotations do not: that attendee substitution is wholesale replacement, that DST is resolved against the organizer's zone, and that email addresses must not be guessed. It does not discuss confirm gating, ETag concurrency, or read-only fields, leaving modest gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core guidance is front-loaded and useful, but the 'TIP' block is verbose and partly redundant ('CRITICAL: Do not try to guess the email address'), and the description is dense with parenthetical tool references. It is informative but could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with a deep nested body, no output schema, and 83% schema coverage, the description supplies the critical operational context (ID provenance, time-zone resolution, attendee replacement). Missing only the confirm-gate workflow and concurrency (ETag) notes, which would raise it to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so most parameters are already documented, and the description reinforces the nested {dateTime, timeZone} shape and the calendarId/eventId naming. With coverage this high the description's marginal param value is limited, matching the 3 baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a specific calendar event') and distinguishes itself from siblings by naming the exact prerequisite tools for each ID (list-calendars for calendarId, list-specific-calendar-events/get-specific-calendar-view for eventId). An agent can route to this tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear provenance for each required ID and a rule for choosing time zones (UTC for one-offs, organizer zone for recurring events), plus a warning that setting attendees replaces the whole list. It lacks explicit when-not-to-use guidance (e.g. when to prefer create vs update, or the single-instance vs seriesMaster distinction).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-subscriptionupdate-subscriptionADestructive
Renew a subscription by extending its expiry time. The table in the Permissions section lists the resources that support subscribing to change notifications. Subscriptions expire after a length of time that varies by resource type. In order to avoid missing change notifications, an app should renew its subscriptions well in advance of their expiry date. See subscription for maximum length of a subscription for each resource type.
💡 TIP: Renews a webhook subscription by extending its expiration. Body: { expirationDateTime (ISO 8601, new expiry) }. Call before the current expirationDateTime to avoid missing notifications. Max extension varies by resource type — check Microsoft Graph docs for subscription limits.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| subscriptionId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description does not need to repeat these. The description adds that renewal extends expiration and warns about max limits, which is consistent with the destructive flag. It also reiterates the need to renew before expiry. No contradictions; the description complements annotations with practical timing context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized, with the main purpose in the first sentence. The second paragraph is a helpful tip that front-loads the essential information (body format and timing). The first paragraph includes somewhat generic context about permissions and expiry, which is useful but could be trimmed. Overall, well-structured and not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex schema and no output schema, the description supplies enough context to call it correctly: it tells the agent to pass the new expirationDateTime before expiry, and to check limits. It does not cover the generic flags like confirm or includeHeaders, but these are likely consistent across tools and not essential for this purpose. The description is complete for the core operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage, the description still adds significant value by explicitly stating the essential body parameter: 'Body: { expirationDateTime (ISO 8601, new expiry) }.' This clarifies that in the update operation, only the expiry field is required in the body, which is not immediately apparent from the schema that lists many optional properties. Additionally, the description highlights the subscriptionId parameter implicitly by its focus on renewal, and the schema itself clarifies the naming. This goes beyond the schema's existing documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Renew a subscription by extending its expiry time.' It specifies the verb (renew), the resource (subscription), and the action (extending expiry). This distinguishes it from sibling tools like create-subscription, delete-subscription, and reauthorize-subscription, which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: 'Call before the current expirationDateTime to avoid missing notifications.' It also advises checking maximum extension limits for each resource type. However, it does not explicitly mention exclusions or when not to use it, but the sibling set makes that obvious. This is more than implied; it gives actionable timing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-todo-taskupdate-todo-taskADestructive
Update the properties of a todoTask object.
💡 TIP: Updates a Microsoft To Do task. Use this to mark a to-do item complete or done (body: { status: "completed" }), reopen it (status: "notStarted"), rename it (title), or change its due date (dueDateTime), reminder (reminderDateTime), importance, or notes (body). Requires todoTaskListId from list-todo-task-lists and todoTaskId from list-todo-tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| todoTaskId | Yes | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write and destructive behavior (readOnlyHint=false, destructiveHint=true), so the description doesn't need to restate that. It adds context about which properties can be modified and the source of required IDs, which goes beyond the annotations. However, it does not mention confirm gating (though that is in the parameter schema) or any side effects, which is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight two-sentence structure: first the core purpose, then a concise tip with concrete use cases and dependencies. There is no unnecessary detail, and the most critical information (what it updates and how to find the IDs) is front-loaded. This is exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a large nested schema and no output schema, the description covers the essential operational context: purpose, specific property changes, and prerequisite IDs. The schema covers field-level details, and annotations cover the safety profile. It does not mention partial update semantics or response behavior, but these are either inferable or not critical for correct invocation, so the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 83% schema description coverage, the baseline is 3. The description adds practical value by demonstrating how to use the body parameter (e.g., { status: 'completed' }) and explaining that todoTaskListId and todoTaskId come from specific list operations. These examples clarify the meaning of the body structure and ID parameters beyond the schema's generic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'todoTask object,' and provides concrete examples of common operations (mark complete, reopen, rename, change due date, etc.). It distinguishes this tool from siblings like update-todo-task-list, which targets a different resource, and from create/delete operations. The purpose is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage scenarios (e.g., 'Use this to mark a to-do item complete or done') and specifies the required IDs from list-todo-task-lists and list-todo-tasks. It does not explicitly mention alternatives or when not to use it, but the examples and dependencies strongly imply this is the tool for modifying an existing task. This is strong guidance, though a brief note about alternatives would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-todo-task-listupdate-todo-task-listADestructive
Update the properties of a todoTaskList object.
💡 TIP: Renames a Microsoft To Do task list. Body: { displayName: 'New name' }. Only displayName is writable. Built-in lists (Flagged emails, the default Tasks list) cannot be renamed — the API returns an error. Get list ids via list-todo-task-lists.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| todoTaskListId | Yes | 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. | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive and non-read-only, so the description isn't required to repeat that. It adds value by disclosing that only displayName is writable and that built-in lists fail with an API error, preventing misuse. It doesn't cover response behavior, but given the annotations, this is a solid disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action (rename) appears early, followed by a concise tip with the exact body format and constraints. Every sentence contributes, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with only one writable field, the description covers the essential behavior, the required body format, the failure mode for built-in lists, and how to obtain the list ID. The destructive confirm gate is documented in the input schema's confirm parameter, so that omission doesn't hurt completeness. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes parameters at 80% coverage, so the baseline is 3. The description adds a concrete body example ({ displayName: 'New name' }) and clarifies that only displayName is meaningful, which is critical because the schema's body object allows many properties and additionalProperties: true. This goes beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Renames a Microsoft To Do task list') and identifies the exact writable property ('Only displayName is writable'). This clearly distinguishes it from sibling tools like update-todo-task, which operate on tasks rather than the task list itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent what this tool is for (renaming a list), what can be changed (displayName only), and what cannot be done (built-in lists return an error). It also points to the sibling tool list-todo-task-lists for obtaining list IDs, effectively guiding selection and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload-file-contentupload-file-contentADestructive
The content stream, if the item represents a file.
💡 TIP: Body is a base64-encoded string of the file bytes; the server decodes it before PUT. Graph accepts up to 250MB here, but the whole string travels as a tool argument and a truncated one decodes to a truncated file with no error, so use create-upload-session rather than emitting a large base64 string. For new files use path format: /items/root:/path/to/file.txt:/content. Overwrites existing files without warning.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Base64-encoded file content. The server decodes it and PUTs the raw bytes to Microsoft Graph. | |
| confirm | No | 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. | |
| driveId | Yes | Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph. | |
| driveItemId | Yes | Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and readOnlyHint=false, and the description adds specific behavioral details: 'Overwrites existing files without warning' and the risk of truncation with no error. It also discloses the 250MB limit and that the body travels as a tool argument. This goes beyond the annotations and gives the agent actionable warnings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but structurally scattered. It starts with an ambiguous sentence, then jumps into a tip block, then the overwrite warning. It's not front-loaded with a clear purpose statement, and the information is presented as a series of caveats rather than a coherent explanation. It is still concise, but the organization could be improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers key operational risks (truncation, overwrite, size) and points to the alternative for large files. However, it does not explicitly state the tool's primary function or return value, and it omits any prerequisites (e.g., authentication, permissions). Given no output schema, the agent must infer the purpose from the title and the scattered hints, which introduces ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful context that is not in the schema: the truncation risk when the base64 string is cut off, the size limit, and the path format for new files. This enriches the understanding of the body and driveItemId parameters beyond their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description never explicitly states 'This tool uploads file content to a specified drive item.' It opens with an ambiguous fragment, 'The content stream, if the item represents a file,' and then provides operational tips. The purpose is inferable from the title and the tip about path format, but the description itself lacks a clear verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to avoid this tool: it warns against using it for large files and directs the agent to create-upload-session instead. It also notes that new files use a path format, which differentiates from existing items. It does not explicitly state when to use this tool over alternatives, but the exclusion is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload-my-profile-photoupload-my-profile-photoADestructive
Update the photo for the specified contact, group, team, or user in a tenant. The size of the photo you can update to is limited to 4 MB. You can use either PATCH or PUT for this operation.
💡 TIP: Uploads a new profile photo for the signed-in user. Body is a base64-encoded string of the image bytes (the server decodes before PUT). Photo must be JPEG, max 4 MB; the base64 travels as a tool argument and a truncated one is written without error, so resize before encoding instead of emitting a large string. Microsoft 365 generates HD downsized variants automatically (48x48, 64x64, 96x96, 120x120, 240x240, 360x360, 432x432, 504x504, 648x648). For work or school accounts, ProfilePhoto.ReadWrite.All is the more granular alternative permission. Use download-bytes with target=/me/photo/$value to retrieve the current photo.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Base64-encoded file content. The server decodes it and PUTs the raw bytes to Microsoft Graph. | |
| confirm | No | 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. | |
| includeHeaders | No | Include response headers (including ETag) in the response metadata | |
| excludeResponse | No | Exclude the full response body and only return success or failure indication |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already indicating destructiveHint=true and readOnlyHint=false, the description adds substantial value by disclosing the 4 MB limit, JPEG requirement, automatic HD variant generation, and the critical warning that a truncated base64 string is written without error. It also explains permission requirements and the decoding behavior, making the tool's behavior well-understood beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose, with a formal sentence followed by a detailed tip. However, each piece of information is useful and non-redundant. It is front-loaded with the purpose statement, and the tip is logically appended. While it could be condensed, the extra details (like the truncation warning and HD variant list) justify the length. It is not bloated with irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for an agent to call the tool correctly. It covers the action, format, size constraints, permission considerations, and complementary retrieval method. It also addresses potential failure modes (truncation). Given there is no output schema, the description does not need to explain return values. The only slight ambiguity between 'specified contact, group, team, or user' and 'signed-in user' is resolved in the tip, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds significant meaning to the `body` parameter by explaining it must be a base64-encoded string of image bytes, JPEG format, and max 4 MB, plus the truncation warning. This goes beyond the schema's simple text. It also implicitly explains the confirm parameter's role in the destructive context, adding context that helps the agent decide when to set it true.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Update the photo for the specified contact, group, team, or user in a tenant.' It also specifies the resource (profile photo) and the operation (update/upload). The tip clarifies it is specifically for the signed-in user's photo, removing ambiguity. This distinguishes it from sibling tools like upload-file-content or create-upload-session, which are for drive files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance: it specifies the required format (JPEG), size limit (4 MB), the need to encode as base64, and a warning about truncation. It also suggests using download-bytes to retrieve the current photo, which helps the agent understand complementary tools. However, it does not explicitly compare with alternative upload tools or state when NOT to use this tool, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify-loginA
Check current Microsoft authentication status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'check', implying a read-only operation with no side effects, but it does not mention dependencies (e.g., requires an active session) or what happens if the user is not authenticated. The description adds no detail beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is front-loaded with the action word 'Check'. There is zero wasted wording, and it is immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description provides the essential purpose. However, it does not mention what the expected outcome is (e.g., returns a boolean or status object), which could leave an agent uncertain about how to interpret the result. Some additional detail about the return value would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100% (vacuously). Since there are no parameters, the baseline is 4. The description does not need to explain parameters that don't exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Check current Microsoft authentication status' clearly states the verb 'Check' and the resource 'current Microsoft authentication status'. It distinguishes itself from sibling tools like 'login' and 'logout' by focusing on verification rather than initiating or terminating a session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that it should be used to confirm authentication before other operations, nor does it contrast with 'login' or 'logout'. The context is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
67 tool updates
v0.154.2- Changed
create-onedrive-folder2 fields changed- changed
Input schema / properties / body / properties / createdByUser / descriptionPrevious value: -"[Note: Simplified from 137 properties to 25 most common ones]"New value: +"[Note: Simplified from 138 properties to 25 most common ones]" - changed
Input schema / properties / body / properties / lastModifiedByUser / descriptionPrevious value: -"[Note: Simplified from 137 properties to 25 most common ones]"New value: +"[Note: Simplified from 138 properties to 25 most common ones]"
- Changed
get-calendar-event5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-calendar-view11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
get-current-user5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-drive-delta11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
get-drive-item5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-drive-root-item5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-excel-range-format5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-excel-table5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-mail-message5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-mailbox-settings5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-my-profile5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-outlook-contact5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-planner-bucket5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-planner-plan5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-planner-task5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-planner-task-details5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-specific-calendar-event5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-specific-calendar-view11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
get-subscription2 fields changed- added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
get-todo-task5 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string"
- Changed
list-all-onenote-sections11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-calendar-event-instances11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-calendar-events11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-calendar-events-delta9 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer"
- Changed
list-calendar-view-delta9 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer"
- Changed
list-calendars11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-contact-folder-child-folders11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-contact-folder-contacts11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-contact-folders11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-drive-item-permissions11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-drive-item-thumbnails11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-drive-item-versions11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-drives11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-excel-table-rows11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-excel-tables11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-excel-worksheets11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-focused-inbox-overrides11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-folder-files11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-attachments11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-child-folders11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-folder-messages11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-folder-messages-delta11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-folders11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-messages11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-mail-rules11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-my-calendar-permissions11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-onenote-notebook-sections11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-onenote-notebooks11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-onenote-pages11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-onenote-section-groups11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-onenote-section-pages11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-outlook-categories11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-outlook-contacts11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-plan-buckets11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-plan-tasks11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-planner-task-messages11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-planner-tasks11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-specific-calendar-events11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-subscriptions11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-supported-languages4 fields changed- added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-supported-time-zones4 fields changed- added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-todo-linked-resources11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-todo-task-lists11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
list-todo-tasks11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
move-rename-onedrive-item2 fields changed- changed
Input schema / properties / body / properties / createdByUser / descriptionPrevious value: -"[Note: Simplified from 137 properties to 25 most common ones]"New value: +"[Note: Simplified from 138 properties to 25 most common ones]" - changed
Input schema / properties / body / properties / lastModifiedByUser / descriptionPrevious value: -"[Note: Simplified from 137 properties to 25 most common ones]"New value: +"[Note: Simplified from 138 properties to 25 most common ones]"
- Changed
search-onedrive-files11 fields changed- added
Input schema / properties / expand / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / expand / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / expand / typeRemoved value: -"array" - added
Input schema / properties / orderby / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / orderby / typeRemoved value: -"string" - added
Input schema / properties / select / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / select / typeRemoved value: -"string" - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / top / minimumAdded value: +0 - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
48 tool updates
v0.154.0- Changed
get-calendar-view1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
get-drive-delta1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
get-specific-calendar-view1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-all-onenote-sections1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-calendar-event-instances1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-calendar-events1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-calendar-events-delta1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-calendar-view-delta1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-calendars1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-contact-folder-child-folders1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-contact-folder-contacts1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-contact-folders1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-drive-item-permissions1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-drive-item-thumbnails1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-drive-item-versions1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-drives1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-excel-table-rows1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-excel-tables1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-excel-worksheets1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-focused-inbox-overrides1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-folder-files1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-attachments1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-child-folders1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-folder-messages1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-folder-messages-delta1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-folders1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-messages1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-mail-rules1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-my-calendar-permissions1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-onenote-notebook-sections1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-onenote-notebooks1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-onenote-pages1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-onenote-section-groups1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-onenote-section-pages1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-outlook-categories1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-outlook-contacts1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-plan-buckets1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-plan-tasks1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-planner-task-messages1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-planner-tasks1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-specific-calendar-events1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-subscriptions1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-supported-languages1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-supported-time-zones1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-todo-linked-resources1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-todo-task-lists1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
list-todo-tasks1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
- Changed
search-onedrive-files1 field changed- changed
Input schema / properties / skiptoken / descriptionPrevious value: -"Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page."New value: +"Next page: the @odata.nextLink from the previous response. Keep the other arguments the same."
48 tool updates
v0.153.0- Changed
get-calendar-view2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
get-drive-delta2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
get-specific-calendar-view2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-all-onenote-sections2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-calendar-event-instances2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-calendar-events2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-calendar-events-delta2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-calendar-view-delta2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-calendars2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-contact-folder-child-folders2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-contact-folder-contacts2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-contact-folders2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-drive-item-permissions2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-drive-item-thumbnails2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-drive-item-versions2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-drives2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-excel-table-rows2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-excel-tables2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-excel-worksheets2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-focused-inbox-overrides2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-folder-files2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-attachments2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-child-folders2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-folder-messages2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-folder-messages-delta2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-folders2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-messages2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-mail-rules2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-my-calendar-permissions2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-onenote-notebook-sections2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-onenote-notebooks2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-onenote-pages2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-onenote-section-groups2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-onenote-section-pages2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-outlook-categories2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-outlook-contacts2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-plan-buckets2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-plan-tasks2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-planner-task-messages2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-planner-tasks2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-specific-calendar-events2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-subscriptions2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-supported-languages2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-supported-time-zones2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-todo-linked-resources2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-todo-task-lists2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
list-todo-tasks2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
- Changed
search-onedrive-files2 fields changed- changed
Input schema / properties / search / descriptionPrevious value: -"KQL search query — wrap value in double quotes. Cannot combine with $filter."New value: +"KQL search query in one pair of double quotes; directory (users/groups) instead quotes each clause with no outer pair. Cannot combine with $filter." - added
Input schema / properties / skiptokenAdded value: +{ + "description": "Opaque cursor for the next page, taken from the previous response. Copy the $skiptoken value out of @odata.nextLink (or paste the whole nextLink URL — the token is extracted from it) and resend it with the SAME $filter/$select/$expand/$top as the first call. Use this to walk pages one at a time instead of fetchAllPages. Omit it for the first page.", + "type": "string" +}
1 tool update
v0.149.1- Changed
get-mail-message-mime1 field changed- added
Input schema / properties / AcceptAdded value: +{ + "description": "Accept header for the response representation. Defaults to \"text/plain\". Only set this when Graph asks for a different format — e.g. a 403 SpeakerAttributionNotAllowed on transcript content names the media type to retry with.", + "type": "string" +}
36 tool updates
v0.145.2- Changed
create-calendar33 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "unknown", - "skypeForBusiness", - "skypeForConsumer", - "teamsForBusiness" - ], - "type": "string" - }, - "def1": { - "enum": [ - "none", - "freeBusyRead", - "limitedRead", - "read", - "write", - "delegateWithoutPrivateEventAccess", - "delegateWithPrivateEventAccess", - "custom" - ], - "type": "string" - }, - "def2": { - "additionalProperties": true, - "properties": { - "allowNewTimeProposals": { - "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.", - "type": [ - "boolean", - "null" - ] - }, - "attachments": { - "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "attendees": { - "description": "The collection of attendees for the event.", - "items": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "$ref": "#/$defs/def7" - }, - "proposedNewTime": { - "additionalProperties": true, - "properties": { - "end": { - "$ref": "#/$defs/def6" - }, - "start": { - "$ref": "#/$defs/def6" - } - }, - "type": "object" - }, - "status": { - "additionalProperties": true, - "properties": { - "response": { - "enum": [ - "none", - "organizer", - "tentativelyAccepted", - "accepted", - "declined", - "notResponded" - ], - "type": "string" - }, - "time": { - "anyOf": [ - { - "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - } - }, - "type": "object" - }, - "type": { - "enum": [ - "required", - "optional", - "resource" - ], - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "end": { - "$ref": "#/$defs/def6" - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "isAllDay": { - "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.", - "type": [ - "boolean", - "null" - ] - }, - "isOnlineMeeting": { - "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.", - "type": [ - "boolean", - "null" - ] - }, - "isReminderOn": { - "description": "Set to true if an alert is set to remind the user of the event.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "location": { - "additionalProperties": true, - "properties": { - "address": { - "additionalProperties": true, - "properties": { - "city": { - "description": "The city.", - "type": [ - "string", - "null" - ] - }, - "countryOrRegion": { - "description": "The country or region. It's a free-format string value, for example, 'United States'.", - "type": [ - "string", - "null" - ] - }, - "postalCode": { - "description": "The postal code.", - "type": [ - "string", - "null" - ] - }, - "state": { - "description": "The state.", - "type": [ - "string", - "null" - ] - }, - "street": { - "description": "The street.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "coordinates": { - "additionalProperties": true, - "properties": { - "accuracy": { - "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "altitude": { - "description": "The altitude of the location. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "altitudeAccuracy": { - "description": "The accuracy of the altitude. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "latitude": { - "description": "The latitude of the location. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "longitude": { - "description": "The longitude of the location. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - } - }, - "type": "object" - }, - "displayName": { - "description": "The name associated with the location.", - "type": [ - "string", - "null" - ] - }, - "locationEmailAddress": { - "description": "Optional email address of the location.", - "type": [ - "string", - "null" - ] - }, - "locationType": { - "enum": [ - "default", - "conferenceRoom", - "homeAddress", - "businessAddress", - "geoCoordinates", - "streetAddress", - "hotel", - "restaurant", - "localBusiness", - "postalAddress" - ], - "type": "string" - }, - "locationUri": { - "description": "Optional URI representing the location.", - "type": [ - "string", - "null" - ] - }, - "uniqueId": { - "description": "For internal use only.", - "type": [ - "string", - "null" - ] - }, - "uniqueIdType": { - "enum": [ - "unknown", - "locationStore", - "directory", - "private", - "bing" - ], - "type": "string" - } - }, - "type": "object" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.", - "items": { - "$ref": "#/$defs/def3" - }, - "type": "array" - }, - "recurrence": { - "additionalProperties": true, - "properties": { - "pattern": { - "additionalProperties": true, - "properties": { - "dayOfMonth": { - "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "daysOfWeek": { - "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern. Required if type is weekly, relativeMonthly, or relativeYearly.", - "items": { - "anyOf": [ - { - "$ref": "#/$defs/def4" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } - ] - }, - "type": "array" - }, - "firstDayOfWeek": { - "$ref": "#/$defs/def4" - }, - "index": { - "enum": [ - "first", - "second", - "third", - "fourth", - "last" - ], - "type": "string" - }, - "interval": { - "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "month": { - "description": "The month in which the event occurs. This is a number from 1 to 12.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "type": { - "enum": [ - "daily", - "weekly", - "absoluteMonthly", - "relativeMonthly", - "absoluteYearly", - "relativeYearly" - ], - "type": "string" - } - }, - "type": "object" - }, - "range": { - "additionalProperties": true, - "properties": { - "endDate": { - "anyOf": [ - { - "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate." - }, - "numberOfOccurrences": { - "description": "The number of times to repeat the event. Required and must be positive if type is numbered.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "recurrenceTimeZone": { - "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.", - "type": [ - "string", - "null" - ] - }, - "startDate": { - "anyOf": [ - { - "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required." - }, - "type": { - "enum": [ - "endDate", - "noEnd", - "numbered" - ], - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "reminderMinutesBeforeStart": { - "anyOf": [ - { - "description": "The number of minutes before the event start time that the reminder alert occurs.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The number of minutes before the event start time that the reminder alert occurs." - }, - "responseRequested": { - "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.", - "type": [ - "boolean", - "null" - ] - }, - "sensitivity": { - "enum": [ - "normal", - "personal", - "private", - "confidential" - ], - "type": "string" - }, - "showAs": { - "enum": [ - "unknown", - "free", - "tentative", - "busy", - "oof", - "workingElsewhere" - ], - "type": "string" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.", - "items": { - "$ref": "#/$defs/def5" - }, - "type": "array" - }, - "start": { - "$ref": "#/$defs/def6" - }, - "subject": { - "description": "The text of the event's subject line.", - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "singleInstance", - "occurrence", - "exception", - "seriesMaster" - ], - "type": "string" - } - }, - "type": "object" - }, - "def3": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "def4": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - "def5": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def6": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def7": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / allowedOnlineMeetingProviders / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "unknown", + "skypeForBusiness", + "skypeForConsumer", + "teamsForBusiness" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / body / properties / calendarPermissions / items / properties / allowedRoles / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def1" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / propertiesAdded value: +{ + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / typeAdded value: +"object" - removed
Input schema / properties / body / properties / calendarPermissions / items / properties / role / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / calendarPermissions / items / properties / role / enumAdded value: +[ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" +] - added
Input schema / properties / body / properties / calendarPermissions / items / properties / role / typeAdded value: +"string" - removed
Input schema / properties / body / properties / calendarView / items / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / calendarView / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / calendarView / items / propertiesAdded value: +{ + "allowNewTimeProposals": { + "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.", + "type": [ + "boolean", + "null" + ] + }, + "attachments": { + "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "attendees": { + "description": "The collection of attendees for the event.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "proposedNewTime": { + "additionalProperties": true, + "properties": { + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "status": { + "additionalProperties": true, + "properties": { + "response": { + "enum": [ + "none", + "organizer", + "tentativelyAccepted", + "accepted", + "declined", + "notResponded" + ], + "type": "string" + }, + "time": { + "anyOf": [ + { + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + } + }, + "type": "object" + }, + "type": { + "enum": [ + "required", + "optional", + "resource" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "isAllDay": { + "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.", + "type": [ + "boolean", + "null" + ] + }, + "isOnlineMeeting": { + "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.", + "type": [ + "boolean", + "null" + ] + }, + "isReminderOn": { + "description": "Set to true if an alert is set to remind the user of the event.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "location": { + "additionalProperties": true, + "properties": { + "address": { + "additionalProperties": true, + "properties": { + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "coordinates": { + "additionalProperties": true, + "properties": { + "accuracy": { + "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitude": { + "description": "The altitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitudeAccuracy": { + "description": "The accuracy of the altitude. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "latitude": { + "description": "The latitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "longitude": { + "description": "The longitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "displayName": { + "description": "The name associated with the location.", + "type": [ + "string", + "null" + ] + }, + "locationEmailAddress": { + "description": "Optional email address of the location.", + "type": [ + "string", + "null" + ] + }, + "locationType": { + "enum": [ + "default", + "conferenceRoom", + "homeAddress", + "businessAddress", + "geoCoordinates", + "streetAddress", + "hotel", + "restaurant", + "localBusiness", + "postalAddress" + ], + "type": "string" + }, + "locationUri": { + "description": "Optional URI representing the location.", + "type": [ + "string", + "null" + ] + }, + "uniqueId": { + "description": "For internal use only.", + "type": [ + "string", + "null" + ] + }, + "uniqueIdType": { + "enum": [ + "unknown", + "locationStore", + "directory", + "private", + "bing" + ], + "type": "string" + } + }, + "type": "object" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "recurrence": { + "additionalProperties": true, + "properties": { + "pattern": { + "additionalProperties": true, + "properties": { + "dayOfMonth": { + "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "daysOfWeek": { + "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern. Required if type is weekly, relativeMonthly, or relativeYearly.", + "items": { + "anyOf": [ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } + ] + }, + "type": "array" + }, + "firstDayOfWeek": { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + "index": { + "enum": [ + "first", + "second", + "third", + "fourth", + "last" + ], + "type": "string" + }, + "interval": { + "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "month": { + "description": "The month in which the event occurs. This is a number from 1 to 12.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "type": { + "enum": [ + "daily", + "weekly", + "absoluteMonthly", + "relativeMonthly", + "absoluteYearly", + "relativeYearly" + ], + "type": "string" + } + }, + "type": "object" + }, + "range": { + "additionalProperties": true, + "properties": { + "endDate": { + "anyOf": [ + { + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate." + }, + "numberOfOccurrences": { + "description": "The number of times to repeat the event. Required and must be positive if type is numbered.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "recurrenceTimeZone": { + "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.", + "type": [ + "string", + "null" + ] + }, + "startDate": { + "anyOf": [ + { + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required." + }, + "type": { + "enum": [ + "endDate", + "noEnd", + "numbered" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "reminderMinutesBeforeStart": { + "anyOf": [ + { + "description": "The number of minutes before the event start time that the reminder alert occurs.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The number of minutes before the event start time that the reminder alert occurs." + }, + "responseRequested": { + "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.", + "type": [ + "boolean", + "null" + ] + }, + "sensitivity": { + "enum": [ + "normal", + "personal", + "private", + "confidential" + ], + "type": "string" + }, + "showAs": { + "enum": [ + "unknown", + "free", + "tentative", + "busy", + "oof", + "workingElsewhere" + ], + "type": "string" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "subject": { + "description": "The text of the event's subject line.", + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "singleInstance", + "occurrence", + "exception", + "seriesMaster" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / calendarView / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / defaultOnlineMeetingProvider / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / defaultOnlineMeetingProvider / enumAdded value: +[ + "unknown", + "skypeForBusiness", + "skypeForConsumer", + "teamsForBusiness" +] - added
Input schema / properties / body / properties / defaultOnlineMeetingProvider / typeAdded value: +"string" - removed
Input schema / properties / body / properties / events / items / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / events / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / events / items / propertiesAdded value: +{ + "allowNewTimeProposals": { + "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.", + "type": [ + "boolean", + "null" + ] + }, + "attachments": { + "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "attendees": { + "description": "The collection of attendees for the event.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "proposedNewTime": { + "additionalProperties": true, + "properties": { + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "status": { + "additionalProperties": true, + "properties": { + "response": { + "enum": [ + "none", + "organizer", + "tentativelyAccepted", + "accepted", + "declined", + "notResponded" + ], + "type": "string" + }, + "time": { + "anyOf": [ + { + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + } + }, + "type": "object" + }, + "type": { + "enum": [ + "required", + "optional", + "resource" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "isAllDay": { + "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.", + "type": [ + "boolean", + "null" + ] + }, + "isOnlineMeeting": { + "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.", + "type": [ + "boolean", + "null" + ] + }, + "isReminderOn": { + "description": "Set to true if an alert is set to remind the user of the event.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "location": { + "additionalProperties": true, + "properties": { + "address": { + "additionalProperties": true, + "properties": { + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "coordinates": { + "additionalProperties": true, + "properties": { + "accuracy": { + "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitude": { + "description": "The altitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitudeAccuracy": { + "description": "The accuracy of the altitude. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "latitude": { + "description": "The latitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "longitude": { + "description": "The longitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "displayName": { + "description": "The name associated with the location.", + "type": [ + "string", + "null" + ] + }, + "locationEmailAddress": { + "description": "Optional email address of the location.", + "type": [ + "string", + "null" + ] + }, + "locationType": { + "enum": [ + "default", + "conferenceRoom", + "homeAddress", + "businessAddress", + "geoCoordinates", + "streetAddress", + "hotel", + "restaurant", + "localBusiness", + "postalAddress" + ], + "type": "string" + }, + "locationUri": { + "description": "Optional URI representing the location.", + "type": [ + "string", + "null" + ] + }, + "uniqueId": { + "description": "For internal use only.", + "type": [ + "string", + "null" + ] + }, + "uniqueIdType": { + "enum": [ + "unknown", + "locationStore", + "directory", + "private", + "bing" + ], + "type": "string" + } + }, + "type": "object" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "recurrence": { + "additionalProperties": true, + "properties": { + "pattern": { + "additionalProperties": true, + "properties": { + "dayOfMonth": { + "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "daysOfWeek": { + "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern. Required if type is weekly, relativeMonthly, or relativeYearly.", + "items": { + "anyOf": [ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } + ] + }, + "type": "array" + }, + "firstDayOfWeek": { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + "index": { + "enum": [ + "first", + "second", + "third", + "fourth", + "last" + ], + "type": "string" + }, + "interval": { + "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "month": { + "description": "The month in which the event occurs. This is a number from 1 to 12.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "type": { + "enum": [ + "daily", + "weekly", + "absoluteMonthly", + "relativeMonthly", + "absoluteYearly", + "relativeYearly" + ], + "type": "string" + } + }, + "type": "object" + }, + "range": { + "additionalProperties": true, + "properties": { + "endDate": { + "anyOf": [ + { + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate." + }, + "numberOfOccurrences": { + "description": "The number of times to repeat the event. Required and must be positive if type is numbered.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "recurrenceTimeZone": { + "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.", + "type": [ + "string", + "null" + ] + }, + "startDate": { + "anyOf": [ + { + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required." + }, + "type": { + "enum": [ + "endDate", + "noEnd", + "numbered" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "reminderMinutesBeforeStart": { + "anyOf": [ + { + "description": "The number of minutes before the event start time that the reminder alert occurs.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The number of minutes before the event start time that the reminder alert occurs." + }, + "responseRequested": { + "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.", + "type": [ + "boolean", + "null" + ] + }, + "sensitivity": { + "enum": [ + "normal", + "personal", + "private", + "confidential" + ], + "type": "string" + }, + "showAs": { + "enum": [ + "unknown", + "free", + "tentative", + "busy", + "oof", + "workingElsewhere" + ], + "type": "string" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "subject": { + "description": "The text of the event's subject line.", + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "singleInstance", + "occurrence", + "exception", + "seriesMaster" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / events / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / multiValueExtendedProperties / items / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / multiValueExtendedProperties / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / multiValueExtendedProperties / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / multiValueExtendedProperties / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / owner / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / owner / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / owner / propertiesAdded value: +{ + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / owner / typeAdded value: +"object" - removed
Input schema / properties / body / properties / singleValueExtendedProperties / items / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / singleValueExtendedProperties / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / singleValueExtendedProperties / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / singleValueExtendedProperties / items / typeAdded value: +"object"
- Changed
create-calendar-event21 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - "def1": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / typeAdded value: +"object" - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / typeAdded value: +"object" - removed
Input schema / properties / body / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / end / typeAdded value: +"object" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / start / typeAdded value: +"object"
- Changed
create-contact-in-folder9 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "city": { - "description": "The city.", - "type": [ - "string", - "null" - ] - }, - "countryOrRegion": { - "description": "The country or region. It's a free-format string value, for example, 'United States'.", - "type": [ - "string", - "null" - ] - }, - "postalCode": { - "description": "The postal code.", - "type": [ - "string", - "null" - ] - }, - "state": { - "description": "The state.", - "type": [ - "string", - "null" - ] - }, - "street": { - "description": "The street.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / businessAddress / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / businessAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / businessAddress / propertiesAdded value: +{ + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / businessAddress / typeAdded value: +"object" - removed
Input schema / properties / body / properties / homeAddress / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / homeAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / homeAddress / propertiesAdded value: +{ + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / homeAddress / typeAdded value: +"object"
- Changed
create-draft-email29 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / bccRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / bccRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / bccRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / bccRecipients / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / ccRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / ccRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / ccRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / ccRecipients / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / flag / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / flag / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / flag / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / flag / properties / dueDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / flag / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / flag / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / flag / properties / dueDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / flag / properties / startDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / flag / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / flag / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / flag / properties / startDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / from / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / from / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / from / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / from / typeAdded value: +"object" - removed
Input schema / properties / body / properties / toRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / toRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / toRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / toRecipients / items / typeAdded value: +"object"
- Changed
create-forward-draft6 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "$ref": "#/$defs/def0" - }, - "dueDateTime": { - "$ref": "#/$defs/def0" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/$defs/def1" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "dueDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "from": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / ToRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / ToRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / ToRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / ToRecipients / items / typeAdded value: +"object"
- Changed
create-mail-rule180 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - }, - "def1": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "def10": { - "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def11": { - "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def12": { - "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def13": { - "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def14": { - "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def15": { - "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def16": { - "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def17": { - "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def18": { - "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def19": { - "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def2": { - "description": "Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def20": { - "enum": [ - "any", - "call", - "doNotForward", - "followUp", - "fyi", - "forward", - "noResponseNecessary", - "read", - "reply", - "replyToAll", - "review" - ], - "type": "string" - }, - "def21": { - "description": "Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def22": { - "description": "Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def23": { - "description": "Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def24": { - "enum": [ - "normal", - "personal", - "private", - "confidential" - ], - "type": "string" - }, - "def25": { - "description": "Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def26": { - "description": "Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def3": { - "description": "Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def4": { - "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def5": { - "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.", - "items": { - "$ref": "#/$defs/def0" - }, - "type": "array" - }, - "def6": { - "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def7": { - "description": "Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def8": { - "$ref": "#/$defs/def1" - }, - "def9": { - "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - } -} - removed
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / actions / properties / forwardTo / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / actions / properties / forwardTo / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / actions / properties / forwardTo / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / actions / properties / forwardTo / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / actions / properties / markImportance / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / actions / properties / markImportance / enumAdded value: +[ + "low", + "normal", + "high" +] - added
Input schema / properties / body / properties / actions / properties / markImportance / typeAdded value: +"string" - removed
Input schema / properties / body / properties / actions / properties / redirectTo / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / actions / properties / redirectTo / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / actions / properties / redirectTo / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / actions / properties / redirectTo / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / conditions / properties / bodyContains / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / conditions / properties / bodyContains / descriptionAdded value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / bodyContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / bodyContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / descriptionAdded value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / categories / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / conditions / properties / categories / descriptionAdded value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / categories / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / categories / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / fromAddresses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / conditions / properties / fromAddresses / descriptionAdded value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / fromAddresses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / conditions / properties / fromAddresses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / hasAttachments / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / conditions / properties / hasAttachments / descriptionAdded value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / hasAttachments / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / headerContains / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / conditions / properties / headerContains / descriptionAdded value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / headerContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / headerContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / importance / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / conditions / properties / importance / enumAdded value: +[ + "low", + "normal", + "high" +] - added
Input schema / properties / body / properties / conditions / properties / importance / typeAdded value: +"string" - removed
Input schema / properties / body / properties / conditions / properties / isApprovalRequest / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / conditions / properties / isApprovalRequest / descriptionAdded value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isApprovalRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isAutomaticForward / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / conditions / properties / isAutomaticForward / descriptionAdded value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isAutomaticForward / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isAutomaticReply / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / conditions / properties / isAutomaticReply / descriptionAdded value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isAutomaticReply / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isEncrypted / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / conditions / properties / isEncrypted / descriptionAdded value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isEncrypted / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isMeetingRequest / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / conditions / properties / isMeetingRequest / descriptionAdded value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isMeetingRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isMeetingResponse / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / conditions / properties / isMeetingResponse / descriptionAdded value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isMeetingResponse / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isNonDeliveryReport / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / conditions / properties / isNonDeliveryReport / descriptionAdded value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isNonDeliveryReport / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isPermissionControlled / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / conditions / properties / isPermissionControlled / descriptionAdded value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isPermissionControlled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isReadReceipt / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / conditions / properties / isReadReceipt / descriptionAdded value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isReadReceipt / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isSigned / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / conditions / properties / isSigned / descriptionAdded value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isSigned / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isVoicemail / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / conditions / properties / isVoicemail / descriptionAdded value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isVoicemail / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / messageActionFlag / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / conditions / properties / messageActionFlag / enumAdded value: +[ + "any", + "call", + "doNotForward", + "followUp", + "fyi", + "forward", + "noResponseNecessary", + "read", + "reply", + "replyToAll", + "review" +] - added
Input schema / properties / body / properties / conditions / properties / messageActionFlag / typeAdded value: +"string" - removed
Input schema / properties / body / properties / conditions / properties / notSentToMe / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / conditions / properties / notSentToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / notSentToMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / recipientContains / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / conditions / properties / recipientContains / descriptionAdded value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / recipientContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / recipientContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / senderContains / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / conditions / properties / senderContains / descriptionAdded value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / senderContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / senderContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / sensitivity / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / conditions / properties / sensitivity / enumAdded value: +[ + "normal", + "personal", + "private", + "confidential" +] - added
Input schema / properties / body / properties / conditions / properties / sensitivity / typeAdded value: +"string" - removed
Input schema / properties / body / properties / conditions / properties / sentCcMe / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / conditions / properties / sentCcMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / sentCcMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / sentOnlyToMe / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / conditions / properties / sentOnlyToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / sentOnlyToMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / bodyContains / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / exceptions / properties / bodyContains / descriptionAdded value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / bodyContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / bodyContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / descriptionAdded value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / categories / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / exceptions / properties / categories / descriptionAdded value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / categories / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / categories / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / fromAddresses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / exceptions / properties / fromAddresses / descriptionAdded value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / fromAddresses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / exceptions / properties / fromAddresses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / hasAttachments / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / exceptions / properties / hasAttachments / descriptionAdded value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / hasAttachments / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / headerContains / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / exceptions / properties / headerContains / descriptionAdded value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / headerContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / headerContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / importance / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / exceptions / properties / importance / enumAdded value: +[ + "low", + "normal", + "high" +] - added
Input schema / properties / body / properties / exceptions / properties / importance / typeAdded value: +"string" - removed
Input schema / properties / body / properties / exceptions / properties / isApprovalRequest / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / exceptions / properties / isApprovalRequest / descriptionAdded value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isApprovalRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isAutomaticForward / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticForward / descriptionAdded value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticForward / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isAutomaticReply / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticReply / descriptionAdded value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticReply / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isEncrypted / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / exceptions / properties / isEncrypted / descriptionAdded value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isEncrypted / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isMeetingRequest / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / exceptions / properties / isMeetingRequest / descriptionAdded value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isMeetingRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isMeetingResponse / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / exceptions / properties / isMeetingResponse / descriptionAdded value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isMeetingResponse / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / descriptionAdded value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isPermissionControlled / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / exceptions / properties / isPermissionControlled / descriptionAdded value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isPermissionControlled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isReadReceipt / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / exceptions / properties / isReadReceipt / descriptionAdded value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isReadReceipt / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isSigned / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / exceptions / properties / isSigned / descriptionAdded value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isSigned / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isVoicemail / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / exceptions / properties / isVoicemail / descriptionAdded value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isVoicemail / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / messageActionFlag / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / exceptions / properties / messageActionFlag / enumAdded value: +[ + "any", + "call", + "doNotForward", + "followUp", + "fyi", + "forward", + "noResponseNecessary", + "read", + "reply", + "replyToAll", + "review" +] - added
Input schema / properties / body / properties / exceptions / properties / messageActionFlag / typeAdded value: +"string" - removed
Input schema / properties / body / properties / exceptions / properties / notSentToMe / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / exceptions / properties / notSentToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / notSentToMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / recipientContains / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / exceptions / properties / recipientContains / descriptionAdded value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / recipientContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / recipientContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / senderContains / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / exceptions / properties / senderContains / descriptionAdded value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / senderContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / senderContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / sensitivity / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / exceptions / properties / sensitivity / enumAdded value: +[ + "normal", + "personal", + "private", + "confidential" +] - added
Input schema / properties / body / properties / exceptions / properties / sensitivity / typeAdded value: +"string" - removed
Input schema / properties / body / properties / exceptions / properties / sentCcMe / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / exceptions / properties / sentCcMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / sentCcMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / sentOnlyToMe / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / exceptions / properties / sentOnlyToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / sentOnlyToMe / typeAdded value: +[ + "boolean", + "null" +]
- Changed
create-my-calendar-permission5 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "none", - "freeBusyRead", - "limitedRead", - "read", - "write", - "delegateWithoutPrivateEventAccess", - "delegateWithPrivateEventAccess", - "custom" - ], - "type": "string" - } -} - changed
Input schema / properties / body / properties / allowedRoles / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / role / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / role / enumAdded value: +[ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" +] - added
Input schema / properties / body / properties / role / typeAdded value: +"string"
- Changed
create-onedrive-folder177 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def10": { - "description": "The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def11": { - "description": "The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def12": { - "description": "Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).", - "type": [ - "string", - "null" - ] - }, - "def13": { - "description": "The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def14": { - "anyOf": [ - { - "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - }, - "def15": { - "description": "Indicates whether the user account was created through one of the following methods: As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in).", - "type": [ - "string", - "null" - ] - }, - "def16": { - "additionalProperties": true, - "properties": {}, - "type": "object" - }, - "def17": { - "anyOf": [ - { - "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted." - }, - "def18": { - "description": "The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def19": { - "description": "The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "def2": { - "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.", - "type": [ - "string", - "null" - ] - }, - "def20": { - "description": "The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search.", - "type": [ - "string", - "null" - ] - }, - "def21": { - "anyOf": [ - { - "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - }, - "def22": { - "description": "The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def23": { - "anyOf": [ - { - "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user." - }, - "def24": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "def25": { - "description": "The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def26": { - "description": "The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.", - "type": [ - "string", - "null" - ] - }, - "def3": { - "description": "true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.", - "type": [ - "boolean", - "null" - ] - }, - "def4": { - "description": "Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).", - "type": [ - "string", - "null" - ] - }, - "def5": { - "description": "The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0).", - "items": { - "additionalProperties": true, - "properties": { - "disabledPlans": { - "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.", - "items": { - "format": "uuid", - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "type": "array" - }, - "skuId": { - "anyOf": [ - { - "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.", - "format": "uuid", - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription." - } - }, - "type": "object" - }, - "type": "array" - }, - "def6": { - "description": "The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not).", - "items": { - "additionalProperties": true, - "properties": { - "assignedDateTime": { - "anyOf": [ - { - "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z." - }, - "capabilityStatus": { - "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.", - "type": [ - "string", - "null" - ] - }, - "service": { - "description": "The name of the service; for example, exchange.", - "type": [ - "string", - "null" - ] - }, - "servicePlanId": { - "anyOf": [ - { - "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.", - "format": "uuid", - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing." - } - }, - "type": "object" - }, - "type": "array" - }, - "def7": { - "additionalProperties": true, - "properties": { - "certificateUserIds": { - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "def8": { - "description": "The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - "def9": { - "description": "The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.", - "items": { - "type": "string" - }, - "type": "array" - } -} - removed
Input schema / properties / body / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdByUser / properties / aboutMe / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / createdByUser / properties / aboutMe / descriptionAdded value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve." - added
Input schema / properties / body / properties / createdByUser / properties / aboutMe / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / descriptionAdded value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / ageGroup / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / createdByUser / properties / ageGroup / descriptionAdded value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / createdByUser / properties / ageGroup / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / descriptionAdded value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)." - added
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "disabledPlans": { + "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.", + "items": { + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "type": "array" + }, + "skuId": { + "anyOf": [ + { + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / descriptionAdded value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)." - added
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "assignedDateTime": { + "anyOf": [ + { + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z." + }, + "capabilityStatus": { + "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.", + "type": [ + "string", + "null" + ] + }, + "service": { + "description": "The name of the service; for example, exchange.", + "type": [ + "string", + "null" + ] + }, + "servicePlanId": { + "anyOf": [ + { + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / typeAdded value: +"array" - removed
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / propertiesAdded value: +{ + "certificateUserIds": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdByUser / properties / birthday / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / createdByUser / properties / birthday / descriptionAdded value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve." - added
Input schema / properties / body / properties / createdByUser / properties / birthday / formatAdded value: +"date-time" - added
Input schema / properties / body / properties / createdByUser / properties / birthday / patternAdded value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$" - added
Input schema / properties / body / properties / createdByUser / properties / birthday / typeAdded value: +"string" - removed
Input schema / properties / body / properties / createdByUser / properties / businessPhones / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / createdByUser / properties / businessPhones / descriptionAdded value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / createdByUser / properties / businessPhones / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / body / properties / createdByUser / properties / businessPhones / typeAdded value: +"array" - removed
Input schema / properties / body / properties / createdByUser / properties / city / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / createdByUser / properties / city / descriptionAdded value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / companyName / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / createdByUser / properties / companyName / descriptionAdded value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / companyName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / descriptionAdded value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / country / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / createdByUser / properties / country / descriptionAdded value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / country / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / createdDateTime / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / createdByUser / properties / createdDateTime / anyOfAdded value: +[ + { + "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / createdDateTime / descriptionAdded value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / createdByUser / properties / creationType / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / createdByUser / properties / creationType / descriptionAdded value: +"Indicates whether the user account was created through one of the following methods: As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)." - added
Input schema / properties / body / properties / createdByUser / properties / creationType / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / propertiesAdded value: +{} - added
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdByUser / properties / deletedDateTime / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / createdByUser / properties / deletedDateTime / anyOfAdded value: +[ + { + "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / deletedDateTime / descriptionAdded value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted." - removed
Input schema / properties / body / properties / createdByUser / properties / department / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / createdByUser / properties / department / descriptionAdded value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / department / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / descriptionAdded value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000." - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / maximumAdded value: +2147483647 - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / minimumAdded value: +-2147483648 - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / typeAdded value: +"number" - removed
Input schema / properties / body / properties / createdByUser / properties / displayName / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / createdByUser / properties / displayName / descriptionAdded value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search." - added
Input schema / properties / body / properties / createdByUser / properties / displayName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / employeeHireDate / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / createdByUser / properties / employeeHireDate / anyOfAdded value: +[ + { + "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / employeeHireDate / descriptionAdded value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / createdByUser / properties / employeeId / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / createdByUser / properties / employeeId / descriptionAdded value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / employeeId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / anyOfAdded value: +[ + { + "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / descriptionAdded value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user." - removed
Input schema / properties / body / properties / createdByUser / properties / id / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / createdByUser / properties / id / descriptionAdded value: +"The unique identifier for an entity. Read-only." - added
Input schema / properties / body / properties / createdByUser / properties / id / typeAdded value: +"string" - removed
Input schema / properties / body / properties / createdByUser / properties / state / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / createdByUser / properties / state / descriptionAdded value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / state / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / descriptionAdded value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / lastModifiedBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / lastModifiedBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / lastModifiedBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / descriptionAdded value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / descriptionAdded value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / descriptionAdded value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / descriptionAdded value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "disabledPlans": { + "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.", + "items": { + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "type": "array" + }, + "skuId": { + "anyOf": [ + { + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / descriptionAdded value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "assignedDateTime": { + "anyOf": [ + { + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z." + }, + "capabilityStatus": { + "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.", + "type": [ + "string", + "null" + ] + }, + "service": { + "description": "The name of the service; for example, exchange.", + "type": [ + "string", + "null" + ] + }, + "servicePlanId": { + "anyOf": [ + { + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / typeAdded value: +"array" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / propertiesAdded value: +{ + "certificateUserIds": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / typeAdded value: +"object" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / descriptionAdded value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / formatAdded value: +"date-time" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / patternAdded value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / typeAdded value: +"string" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / descriptionAdded value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / typeAdded value: +"array" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / city / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / city / descriptionAdded value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / companyName / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / companyName / descriptionAdded value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / companyName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / descriptionAdded value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / country / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / country / descriptionAdded value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / country / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / anyOfAdded value: +[ + { + "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / descriptionAdded value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / creationType / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / creationType / descriptionAdded value: +"Indicates whether the user account was created through one of the following methods: As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / creationType / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / propertiesAdded value: +{} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / typeAdded value: +"object" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / anyOfAdded value: +[ + { + "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / descriptionAdded value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / department / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / department / descriptionAdded value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / department / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / descriptionAdded value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / maximumAdded value: +2147483647 - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / minimumAdded value: +-2147483648 - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / typeAdded value: +"number" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / displayName / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / displayName / descriptionAdded value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / displayName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / anyOfAdded value: +[ + { + "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / descriptionAdded value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeId / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeId / descriptionAdded value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / anyOfAdded value: +[ + { + "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / descriptionAdded value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / id / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / id / descriptionAdded value: +"The unique identifier for an entity. Read-only." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / id / typeAdded value: +"string" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / state / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / state / descriptionAdded value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / state / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / descriptionAdded value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / typeAdded value: +[ + "string", + "null" +]
- Changed
create-outlook-contact9 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "city": { - "description": "The city.", - "type": [ - "string", - "null" - ] - }, - "countryOrRegion": { - "description": "The country or region. It's a free-format string value, for example, 'United States'.", - "type": [ - "string", - "null" - ] - }, - "postalCode": { - "description": "The postal code.", - "type": [ - "string", - "null" - ] - }, - "state": { - "description": "The state.", - "type": [ - "string", - "null" - ] - }, - "street": { - "description": "The street.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / businessAddress / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / businessAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / businessAddress / propertiesAdded value: +{ + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / businessAddress / typeAdded value: +"object" - removed
Input schema / properties / body / properties / homeAddress / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / homeAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / homeAddress / propertiesAdded value: +{ + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / homeAddress / typeAdded value: +"object"
- Changed
create-planner-bucket15 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def2": { - "enum": [ - "automatic", - "noPreview", - "checklist", - "description", - "reference" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / typeAdded value: +"string" - removed
Input schema / properties / body / properties / tasks / items / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / tasks / items / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / tasks / items / properties / previewType / typeAdded value: +"string"
- Changed
create-planner-task15 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def2": { - "enum": [ - "automatic", - "noPreview", - "checklist", - "description", - "reference" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / completedBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / completedBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / completedBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / completedBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / details / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / details / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / details / properties / previewType / typeAdded value: +"string" - removed
Input schema / properties / body / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / previewType / typeAdded value: +"string"
- Changed
create-planner-task-message9 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / typeAdded value: +"object"
- Changed
create-reply-all-draft2 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "$ref": "#/$defs/def0" - }, - "dueDateTime": { - "$ref": "#/$defs/def0" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/$defs/def1" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "dueDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "from": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +]
- Changed
create-reply-draft2 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "$ref": "#/$defs/def0" - }, - "dueDateTime": { - "$ref": "#/$defs/def0" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/$defs/def1" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "dueDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "from": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +]
- Changed
create-specific-calendar-event21 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - "def1": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / typeAdded value: +"object" - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / typeAdded value: +"object" - removed
Input schema / properties / body / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / end / typeAdded value: +"object" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / start / typeAdded value: +"object"
- Changed
create-todo-task21 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / completedDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / dueDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / dueDateTime / typeAdded value: +"object" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def1" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / reminderDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / reminderDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / reminderDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / reminderDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / startDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / startDateTime / typeAdded value: +"object"
- Changed
create-todo-task-list29 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def2": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / extensions / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / extensions / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / extensions / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + } +} - added
Input schema / properties / body / properties / extensions / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / extensions / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / extensions / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / extensions / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / extensions / items / typeAdded value: +"object" - changed
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def2" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / startDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / startDateTime / typeAdded value: +"object"
- Changed
decline-calendar-event2 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / ProposedNewTime / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "end": { - "$ref": "#/$defs/def0" - }, - "start": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +]
- Changed
forward-mail-message6 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "$ref": "#/$defs/def0" - }, - "dueDateTime": { - "$ref": "#/$defs/def0" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/$defs/def1" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "dueDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "from": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / ToRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / ToRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / ToRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / ToRecipients / items / typeAdded value: +"object"
- Changed
move-rename-onedrive-item177 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def10": { - "description": "The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def11": { - "description": "The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def12": { - "description": "Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).", - "type": [ - "string", - "null" - ] - }, - "def13": { - "description": "The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def14": { - "anyOf": [ - { - "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - }, - "def15": { - "description": "Indicates whether the user account was created through one of the following methods: As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in).", - "type": [ - "string", - "null" - ] - }, - "def16": { - "additionalProperties": true, - "properties": {}, - "type": "object" - }, - "def17": { - "anyOf": [ - { - "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted." - }, - "def18": { - "description": "The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def19": { - "description": "The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "def2": { - "description": "A freeform text entry field for the user to describe themselves. Requires $select to retrieve.", - "type": [ - "string", - "null" - ] - }, - "def20": { - "description": "The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search.", - "type": [ - "string", - "null" - ] - }, - "def21": { - "anyOf": [ - { - "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - }, - "def22": { - "description": "The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def23": { - "anyOf": [ - { - "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user." - }, - "def24": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "def25": { - "description": "The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values).", - "type": [ - "string", - "null" - ] - }, - "def26": { - "description": "The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.", - "type": [ - "string", - "null" - ] - }, - "def3": { - "description": "true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.", - "type": [ - "boolean", - "null" - ] - }, - "def4": { - "description": "Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in).", - "type": [ - "string", - "null" - ] - }, - "def5": { - "description": "The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0).", - "items": { - "additionalProperties": true, - "properties": { - "disabledPlans": { - "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.", - "items": { - "format": "uuid", - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - "type": "array" - }, - "skuId": { - "anyOf": [ - { - "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.", - "format": "uuid", - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription." - } - }, - "type": "object" - }, - "type": "array" - }, - "def6": { - "description": "The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not).", - "items": { - "additionalProperties": true, - "properties": { - "assignedDateTime": { - "anyOf": [ - { - "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z." - }, - "capabilityStatus": { - "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.", - "type": [ - "string", - "null" - ] - }, - "service": { - "description": "The name of the service; for example, exchange.", - "type": [ - "string", - "null" - ] - }, - "servicePlanId": { - "anyOf": [ - { - "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.", - "format": "uuid", - "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing." - } - }, - "type": "object" - }, - "type": "array" - }, - "def7": { - "additionalProperties": true, - "properties": { - "certificateUserIds": { - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "def8": { - "description": "The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - "def9": { - "description": "The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it.", - "items": { - "type": "string" - }, - "type": "array" - } -} - removed
Input schema / properties / body / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdByUser / properties / aboutMe / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / createdByUser / properties / aboutMe / descriptionAdded value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve." - added
Input schema / properties / body / properties / createdByUser / properties / aboutMe / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / descriptionAdded value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / ageGroup / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / createdByUser / properties / ageGroup / descriptionAdded value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / createdByUser / properties / ageGroup / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / descriptionAdded value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)." - added
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "disabledPlans": { + "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.", + "items": { + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "type": "array" + }, + "skuId": { + "anyOf": [ + { + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / createdByUser / properties / assignedLicenses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / descriptionAdded value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)." - added
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "assignedDateTime": { + "anyOf": [ + { + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z." + }, + "capabilityStatus": { + "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.", + "type": [ + "string", + "null" + ] + }, + "service": { + "description": "The name of the service; for example, exchange.", + "type": [ + "string", + "null" + ] + }, + "servicePlanId": { + "anyOf": [ + { + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / createdByUser / properties / assignedPlans / typeAdded value: +"array" - removed
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / propertiesAdded value: +{ + "certificateUserIds": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / createdByUser / properties / authorizationInfo / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdByUser / properties / birthday / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / createdByUser / properties / birthday / descriptionAdded value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve." - added
Input schema / properties / body / properties / createdByUser / properties / birthday / formatAdded value: +"date-time" - added
Input schema / properties / body / properties / createdByUser / properties / birthday / patternAdded value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$" - added
Input schema / properties / body / properties / createdByUser / properties / birthday / typeAdded value: +"string" - removed
Input schema / properties / body / properties / createdByUser / properties / businessPhones / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / createdByUser / properties / businessPhones / descriptionAdded value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / createdByUser / properties / businessPhones / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / body / properties / createdByUser / properties / businessPhones / typeAdded value: +"array" - removed
Input schema / properties / body / properties / createdByUser / properties / city / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / createdByUser / properties / city / descriptionAdded value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / companyName / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / createdByUser / properties / companyName / descriptionAdded value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / companyName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / descriptionAdded value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / createdByUser / properties / consentProvidedForMinor / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / country / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / createdByUser / properties / country / descriptionAdded value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / country / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / createdDateTime / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / createdByUser / properties / createdDateTime / anyOfAdded value: +[ + { + "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / createdDateTime / descriptionAdded value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / createdByUser / properties / creationType / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / createdByUser / properties / creationType / descriptionAdded value: +"Indicates whether the user account was created through one of the following methods: As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)." - added
Input schema / properties / body / properties / createdByUser / properties / creationType / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / propertiesAdded value: +{} - added
Input schema / properties / body / properties / createdByUser / properties / customSecurityAttributes / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdByUser / properties / deletedDateTime / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / createdByUser / properties / deletedDateTime / anyOfAdded value: +[ + { + "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / deletedDateTime / descriptionAdded value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted." - removed
Input schema / properties / body / properties / createdByUser / properties / department / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / createdByUser / properties / department / descriptionAdded value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / department / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / descriptionAdded value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000." - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / maximumAdded value: +2147483647 - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / minimumAdded value: +-2147483648 - added
Input schema / properties / body / properties / createdByUser / properties / deviceEnrollmentLimit / typeAdded value: +"number" - removed
Input schema / properties / body / properties / createdByUser / properties / displayName / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / createdByUser / properties / displayName / descriptionAdded value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search." - added
Input schema / properties / body / properties / createdByUser / properties / displayName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / employeeHireDate / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / createdByUser / properties / employeeHireDate / anyOfAdded value: +[ + { + "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / employeeHireDate / descriptionAdded value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / createdByUser / properties / employeeId / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / createdByUser / properties / employeeId / descriptionAdded value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / employeeId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / anyOfAdded value: +[ + { + "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / createdByUser / properties / employeeLeaveDateTime / descriptionAdded value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user." - removed
Input schema / properties / body / properties / createdByUser / properties / id / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / createdByUser / properties / id / descriptionAdded value: +"The unique identifier for an entity. Read-only." - added
Input schema / properties / body / properties / createdByUser / properties / id / typeAdded value: +"string" - removed
Input schema / properties / body / properties / createdByUser / properties / state / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / createdByUser / properties / state / descriptionAdded value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / createdByUser / properties / state / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / descriptionAdded value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / lastModifiedBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / lastModifiedBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / lastModifiedBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / descriptionAdded value: +"A freeform text entry field for the user to describe themselves. Requires $select to retrieve." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / aboutMe / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / descriptionAdded value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / accountEnabled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / descriptionAdded value: +"Sets the age group of the user. Allowed values: null, Minor, NotAdult, and Adult. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / ageGroup / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / descriptionAdded value: +"The licenses that are assigned to the user, including inherited (group-based) licenses. This property doesn't differentiate between directly assigned and inherited licenses. Use the licenseAssignmentStates property to identify the directly assigned and inherited licenses. Not nullable. Requires $select to retrieve. Supports $filter (eq, not, /$count eq 0, /$count ne 0)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "disabledPlans": { + "description": "A collection of the unique identifiers for plans that have been disabled. IDs are available in servicePlans > servicePlanId in the tenant's subscribedSkus or serviceStatus > servicePlanId in the tenant's companySubscription.", + "items": { + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + "type": "array" + }, + "skuId": { + "anyOf": [ + { + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The unique identifier for the SKU. Corresponds to the skuId from subscribedSkus or companySubscription." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedLicenses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / descriptionAdded value: +"The plans that are assigned to the user. Read-only. Not nullable. Requires $select to retrieve. Supports $filter (eq and not)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "assignedDateTime": { + "anyOf": [ + { + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time at which the plan was assigned. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z." + }, + "capabilityStatus": { + "description": "Condition of the capability assignment. The possible values are Enabled, Warning, Suspended, Deleted, LockedOut. See a detailed description of each value.", + "type": [ + "string", + "null" + ] + }, + "service": { + "description": "The name of the service; for example, exchange.", + "type": [ + "string", + "null" + ] + }, + "servicePlanId": { + "anyOf": [ + { + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing.", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A GUID that identifies the service plan. For a complete list of GUIDs and their equivalent friendly service names, see Product names and service plan identifiers for licensing." + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / assignedPlans / typeAdded value: +"array" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / propertiesAdded value: +{ + "certificateUserIds": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / authorizationInfo / typeAdded value: +"object" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / descriptionAdded value: +"The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014, is 2014-01-01T00:00:00Z. Requires $select to retrieve." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / formatAdded value: +"date-time" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / patternAdded value: +"^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / birthday / typeAdded value: +"string" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / descriptionAdded value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / businessPhones / typeAdded value: +"array" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / city / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / city / descriptionAdded value: +"The city where the user is located. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / companyName / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / companyName / descriptionAdded value: +"The name of the company that the user is associated with. This property can be useful for describing the company that a guest comes from. The maximum length is 64 characters.Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / companyName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / descriptionAdded value: +"Sets whether consent was obtained for minors. Allowed values: null, Granted, Denied, and NotRequired. For more information, see legal age group property definitions. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / consentProvidedForMinor / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / country / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / country / descriptionAdded value: +"The country or region where the user is located; for example, US or UK. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / country / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / anyOfAdded value: +[ + { + "description": "The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / createdDateTime / descriptionAdded value: +"The date and time the user was created, in ISO 8601 format and UTC. The value can't be modified and is automatically populated when the entity is created. Nullable. For on-premises users, the value represents when they were first created in Microsoft Entra ID. Property is null for some users created before June 2018 and on-premises users that were synced to Microsoft Entra ID before June 2018. Read-only. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / creationType / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / creationType / descriptionAdded value: +"Indicates whether the user account was created through one of the following methods: As a regular school or work account (null). As an external account (Invitation). As a local account for an Azure Active Directory B2C tenant (LocalAccount). Through self-service sign-up by an internal user using email verification (EmailVerified). Through self-service sign-up by a guest signing up through a link that is part of a user flow (SelfServiceSignUp). Read-only.Requires $select to retrieve. Supports $filter (eq, ne, not, in)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / creationType / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / propertiesAdded value: +{} - added
Input schema / properties / body / properties / lastModifiedByUser / properties / customSecurityAttributes / typeAdded value: +"object" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / anyOfAdded value: +[ + { + "description": "Date and time when this object was deleted. Always null when the object hasn't been deleted.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deletedDateTime / descriptionAdded value: +"Date and time when this object was deleted. Always null when the object hasn't been deleted." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / department / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / department / descriptionAdded value: +"The name of the department in which the user works. Maximum length is 64 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / department / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / descriptionAdded value: +"The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / maximumAdded value: +2147483647 - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / minimumAdded value: +-2147483648 - added
Input schema / properties / body / properties / lastModifiedByUser / properties / deviceEnrollmentLimit / typeAdded value: +"number" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / displayName / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / displayName / descriptionAdded value: +"The name displayed in the address book for the user. This value is usually the combination of the user's first name, middle initial, and family name. This property is required when a user is created and it can't be cleared during updates. Maximum length is 256 characters. Returned by default. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values), $orderby, and $search." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / displayName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / anyOfAdded value: +[ + { + "description": "The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in).", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeHireDate / descriptionAdded value: +"The date and time when the user was hired or will start work in a future hire. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in)." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeId / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeId / descriptionAdded value: +"The employee identifier assigned to the user by the organization. The maximum length is 16 characters. Requires $select to retrieve. Supports $filter (eq, ne, not , ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / anyOfAdded value: +[ + { + "description": "The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / body / properties / lastModifiedByUser / properties / employeeLeaveDateTime / descriptionAdded value: +"The date and time when the user left or will leave the organization. To read this property, the calling app must be assigned the User-LifeCycleInfo.Read.All permission. To write this property, the calling app must be assigned the User.Read.All and User-LifeCycleInfo.ReadWrite.All permissions. To read this property in delegated scenarios, the admin needs at least one of the following Microsoft Entra roles: Lifecycle Workflows Administrator (least privilege), Global Reader. To write this property in delegated scenarios, the admin needs the Global Administrator role. Supports $filter (eq, ne, not , ge, le, in). For more information, see Configure the employeeLeaveDateTime property for a user." - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / id / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / id / descriptionAdded value: +"The unique identifier for an entity. Read-only." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / id / typeAdded value: +"string" - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / state / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / state / descriptionAdded value: +"The state or province in the user's address. Maximum length is 128 characters. Requires $select to retrieve. Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values)." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / state / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / descriptionAdded value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / body / properties / lastModifiedByUser / properties / userPrincipalName / typeAdded value: +[ + "string", + "null" +]
- Changed
reply-all-mail-message2 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "$ref": "#/$defs/def0" - }, - "dueDateTime": { - "$ref": "#/$defs/def0" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/$defs/def1" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "dueDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "from": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +]
- Changed
reply-mail-message2 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "$ref": "#/$defs/def0" - }, - "dueDateTime": { - "$ref": "#/$defs/def0" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/$defs/def1" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/$defs/def1" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "dueDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "from": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +]
- Changed
send-mail29 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / Message / properties / bccRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / Message / properties / bccRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / bccRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / Message / properties / bccRecipients / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / Message / properties / ccRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / Message / properties / ccRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / ccRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / Message / properties / ccRecipients / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / Message / properties / flag / properties / startDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / Message / properties / flag / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / flag / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / Message / properties / flag / properties / startDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / Message / properties / from / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / Message / properties / from / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / from / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / Message / properties / from / typeAdded value: +"object" - removed
Input schema / properties / body / properties / Message / properties / toRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / Message / properties / toRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / Message / properties / toRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / Message / properties / toRecipients / items / typeAdded value: +"object"
- Changed
tentatively-accept-calendar-event2 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / ProposedNewTime / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "end": { - "$ref": "#/$defs/def0" - }, - "start": { - "$ref": "#/$defs/def0" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +]
- Changed
update-calendar33 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "unknown", - "skypeForBusiness", - "skypeForConsumer", - "teamsForBusiness" - ], - "type": "string" - }, - "def1": { - "enum": [ - "none", - "freeBusyRead", - "limitedRead", - "read", - "write", - "delegateWithoutPrivateEventAccess", - "delegateWithPrivateEventAccess", - "custom" - ], - "type": "string" - }, - "def2": { - "additionalProperties": true, - "properties": { - "allowNewTimeProposals": { - "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.", - "type": [ - "boolean", - "null" - ] - }, - "attachments": { - "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "attendees": { - "description": "The collection of attendees for the event.", - "items": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "$ref": "#/$defs/def7" - }, - "proposedNewTime": { - "additionalProperties": true, - "properties": { - "end": { - "$ref": "#/$defs/def6" - }, - "start": { - "$ref": "#/$defs/def6" - } - }, - "type": "object" - }, - "status": { - "additionalProperties": true, - "properties": { - "response": { - "enum": [ - "none", - "organizer", - "tentativelyAccepted", - "accepted", - "declined", - "notResponded" - ], - "type": "string" - }, - "time": { - "anyOf": [ - { - "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - } - }, - "type": "object" - }, - "type": { - "enum": [ - "required", - "optional", - "resource" - ], - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "end": { - "$ref": "#/$defs/def6" - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "isAllDay": { - "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.", - "type": [ - "boolean", - "null" - ] - }, - "isOnlineMeeting": { - "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.", - "type": [ - "boolean", - "null" - ] - }, - "isReminderOn": { - "description": "Set to true if an alert is set to remind the user of the event.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "location": { - "additionalProperties": true, - "properties": { - "address": { - "additionalProperties": true, - "properties": { - "city": { - "description": "The city.", - "type": [ - "string", - "null" - ] - }, - "countryOrRegion": { - "description": "The country or region. It's a free-format string value, for example, 'United States'.", - "type": [ - "string", - "null" - ] - }, - "postalCode": { - "description": "The postal code.", - "type": [ - "string", - "null" - ] - }, - "state": { - "description": "The state.", - "type": [ - "string", - "null" - ] - }, - "street": { - "description": "The street.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "coordinates": { - "additionalProperties": true, - "properties": { - "accuracy": { - "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "altitude": { - "description": "The altitude of the location. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "altitudeAccuracy": { - "description": "The accuracy of the altitude. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "latitude": { - "description": "The latitude of the location. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - }, - "longitude": { - "description": "The longitude of the location. [Simplified from 3 options]", - "type": [ - "number", - "null" - ] - } - }, - "type": "object" - }, - "displayName": { - "description": "The name associated with the location.", - "type": [ - "string", - "null" - ] - }, - "locationEmailAddress": { - "description": "Optional email address of the location.", - "type": [ - "string", - "null" - ] - }, - "locationType": { - "enum": [ - "default", - "conferenceRoom", - "homeAddress", - "businessAddress", - "geoCoordinates", - "streetAddress", - "hotel", - "restaurant", - "localBusiness", - "postalAddress" - ], - "type": "string" - }, - "locationUri": { - "description": "Optional URI representing the location.", - "type": [ - "string", - "null" - ] - }, - "uniqueId": { - "description": "For internal use only.", - "type": [ - "string", - "null" - ] - }, - "uniqueIdType": { - "enum": [ - "unknown", - "locationStore", - "directory", - "private", - "bing" - ], - "type": "string" - } - }, - "type": "object" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.", - "items": { - "$ref": "#/$defs/def3" - }, - "type": "array" - }, - "recurrence": { - "additionalProperties": true, - "properties": { - "pattern": { - "additionalProperties": true, - "properties": { - "dayOfMonth": { - "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "daysOfWeek": { - "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern. Required if type is weekly, relativeMonthly, or relativeYearly.", - "items": { - "anyOf": [ - { - "$ref": "#/$defs/def4" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } - ] - }, - "type": "array" - }, - "firstDayOfWeek": { - "$ref": "#/$defs/def4" - }, - "index": { - "enum": [ - "first", - "second", - "third", - "fourth", - "last" - ], - "type": "string" - }, - "interval": { - "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "month": { - "description": "The month in which the event occurs. This is a number from 1 to 12.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "type": { - "enum": [ - "daily", - "weekly", - "absoluteMonthly", - "relativeMonthly", - "absoluteYearly", - "relativeYearly" - ], - "type": "string" - } - }, - "type": "object" - }, - "range": { - "additionalProperties": true, - "properties": { - "endDate": { - "anyOf": [ - { - "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate." - }, - "numberOfOccurrences": { - "description": "The number of times to repeat the event. Required and must be positive if type is numbered.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - "recurrenceTimeZone": { - "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.", - "type": [ - "string", - "null" - ] - }, - "startDate": { - "anyOf": [ - { - "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required." - }, - "type": { - "enum": [ - "endDate", - "noEnd", - "numbered" - ], - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "reminderMinutesBeforeStart": { - "anyOf": [ - { - "description": "The number of minutes before the event start time that the reminder alert occurs.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The number of minutes before the event start time that the reminder alert occurs." - }, - "responseRequested": { - "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.", - "type": [ - "boolean", - "null" - ] - }, - "sensitivity": { - "enum": [ - "normal", - "personal", - "private", - "confidential" - ], - "type": "string" - }, - "showAs": { - "enum": [ - "unknown", - "free", - "tentative", - "busy", - "oof", - "workingElsewhere" - ], - "type": "string" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.", - "items": { - "$ref": "#/$defs/def5" - }, - "type": "array" - }, - "start": { - "$ref": "#/$defs/def6" - }, - "subject": { - "description": "The text of the event's subject line.", - "type": [ - "string", - "null" - ] - }, - "type": { - "enum": [ - "singleInstance", - "occurrence", - "exception", - "seriesMaster" - ], - "type": "string" - } - }, - "type": "object" - }, - "def3": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "def4": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - "def5": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def6": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def7": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - changed
Input schema / properties / body / properties / allowedOnlineMeetingProviders / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "unknown", + "skypeForBusiness", + "skypeForConsumer", + "teamsForBusiness" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / body / properties / calendarPermissions / items / properties / allowedRoles / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def1" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / propertiesAdded value: +{ + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / calendarPermissions / items / properties / emailAddress / typeAdded value: +"object" - removed
Input schema / properties / body / properties / calendarPermissions / items / properties / role / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / calendarPermissions / items / properties / role / enumAdded value: +[ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" +] - added
Input schema / properties / body / properties / calendarPermissions / items / properties / role / typeAdded value: +"string" - removed
Input schema / properties / body / properties / calendarView / items / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / calendarView / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / calendarView / items / propertiesAdded value: +{ + "allowNewTimeProposals": { + "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.", + "type": [ + "boolean", + "null" + ] + }, + "attachments": { + "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "attendees": { + "description": "The collection of attendees for the event.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "proposedNewTime": { + "additionalProperties": true, + "properties": { + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "status": { + "additionalProperties": true, + "properties": { + "response": { + "enum": [ + "none", + "organizer", + "tentativelyAccepted", + "accepted", + "declined", + "notResponded" + ], + "type": "string" + }, + "time": { + "anyOf": [ + { + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + } + }, + "type": "object" + }, + "type": { + "enum": [ + "required", + "optional", + "resource" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "isAllDay": { + "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.", + "type": [ + "boolean", + "null" + ] + }, + "isOnlineMeeting": { + "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.", + "type": [ + "boolean", + "null" + ] + }, + "isReminderOn": { + "description": "Set to true if an alert is set to remind the user of the event.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "location": { + "additionalProperties": true, + "properties": { + "address": { + "additionalProperties": true, + "properties": { + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "coordinates": { + "additionalProperties": true, + "properties": { + "accuracy": { + "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitude": { + "description": "The altitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitudeAccuracy": { + "description": "The accuracy of the altitude. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "latitude": { + "description": "The latitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "longitude": { + "description": "The longitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "displayName": { + "description": "The name associated with the location.", + "type": [ + "string", + "null" + ] + }, + "locationEmailAddress": { + "description": "Optional email address of the location.", + "type": [ + "string", + "null" + ] + }, + "locationType": { + "enum": [ + "default", + "conferenceRoom", + "homeAddress", + "businessAddress", + "geoCoordinates", + "streetAddress", + "hotel", + "restaurant", + "localBusiness", + "postalAddress" + ], + "type": "string" + }, + "locationUri": { + "description": "Optional URI representing the location.", + "type": [ + "string", + "null" + ] + }, + "uniqueId": { + "description": "For internal use only.", + "type": [ + "string", + "null" + ] + }, + "uniqueIdType": { + "enum": [ + "unknown", + "locationStore", + "directory", + "private", + "bing" + ], + "type": "string" + } + }, + "type": "object" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "recurrence": { + "additionalProperties": true, + "properties": { + "pattern": { + "additionalProperties": true, + "properties": { + "dayOfMonth": { + "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "daysOfWeek": { + "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern. Required if type is weekly, relativeMonthly, or relativeYearly.", + "items": { + "anyOf": [ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } + ] + }, + "type": "array" + }, + "firstDayOfWeek": { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + "index": { + "enum": [ + "first", + "second", + "third", + "fourth", + "last" + ], + "type": "string" + }, + "interval": { + "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "month": { + "description": "The month in which the event occurs. This is a number from 1 to 12.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "type": { + "enum": [ + "daily", + "weekly", + "absoluteMonthly", + "relativeMonthly", + "absoluteYearly", + "relativeYearly" + ], + "type": "string" + } + }, + "type": "object" + }, + "range": { + "additionalProperties": true, + "properties": { + "endDate": { + "anyOf": [ + { + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate." + }, + "numberOfOccurrences": { + "description": "The number of times to repeat the event. Required and must be positive if type is numbered.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "recurrenceTimeZone": { + "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.", + "type": [ + "string", + "null" + ] + }, + "startDate": { + "anyOf": [ + { + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required." + }, + "type": { + "enum": [ + "endDate", + "noEnd", + "numbered" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "reminderMinutesBeforeStart": { + "anyOf": [ + { + "description": "The number of minutes before the event start time that the reminder alert occurs.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The number of minutes before the event start time that the reminder alert occurs." + }, + "responseRequested": { + "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.", + "type": [ + "boolean", + "null" + ] + }, + "sensitivity": { + "enum": [ + "normal", + "personal", + "private", + "confidential" + ], + "type": "string" + }, + "showAs": { + "enum": [ + "unknown", + "free", + "tentative", + "busy", + "oof", + "workingElsewhere" + ], + "type": "string" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "subject": { + "description": "The text of the event's subject line.", + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "singleInstance", + "occurrence", + "exception", + "seriesMaster" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / calendarView / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / defaultOnlineMeetingProvider / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / defaultOnlineMeetingProvider / enumAdded value: +[ + "unknown", + "skypeForBusiness", + "skypeForConsumer", + "teamsForBusiness" +] - added
Input schema / properties / body / properties / defaultOnlineMeetingProvider / typeAdded value: +"string" - removed
Input schema / properties / body / properties / events / items / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / events / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / events / items / propertiesAdded value: +{ + "allowNewTimeProposals": { + "description": "true if the meeting organizer allows invitees to propose a new time when responding; otherwise, false. Optional. The default is true.", + "type": [ + "boolean", + "null" + ] + }, + "attachments": { + "description": "The collection of FileAttachment, ItemAttachment, and referenceAttachment attachments for the event. Navigation property. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "attendees": { + "description": "The collection of attendees for the event.", + "items": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "proposedNewTime": { + "additionalProperties": true, + "properties": { + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "status": { + "additionalProperties": true, + "properties": { + "response": { + "enum": [ + "none", + "organizer", + "tentativelyAccepted", + "accepted", + "declined", + "notResponded" + ], + "type": "string" + }, + "time": { + "anyOf": [ + { + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the response was returned. It uses ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + } + }, + "type": "object" + }, + "type": { + "enum": [ + "required", + "optional", + "resource" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "end": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "isAllDay": { + "description": "Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.", + "type": [ + "boolean", + "null" + ] + }, + "isOnlineMeeting": { + "description": "True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Subsequently, Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.", + "type": [ + "boolean", + "null" + ] + }, + "isReminderOn": { + "description": "Set to true if an alert is set to remind the user of the event.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "location": { + "additionalProperties": true, + "properties": { + "address": { + "additionalProperties": true, + "properties": { + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "coordinates": { + "additionalProperties": true, + "properties": { + "accuracy": { + "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitude": { + "description": "The altitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "altitudeAccuracy": { + "description": "The accuracy of the altitude. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "latitude": { + "description": "The latitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + }, + "longitude": { + "description": "The longitude of the location. [Simplified from 3 options]", + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "displayName": { + "description": "The name associated with the location.", + "type": [ + "string", + "null" + ] + }, + "locationEmailAddress": { + "description": "Optional email address of the location.", + "type": [ + "string", + "null" + ] + }, + "locationType": { + "enum": [ + "default", + "conferenceRoom", + "homeAddress", + "businessAddress", + "geoCoordinates", + "streetAddress", + "hotel", + "restaurant", + "localBusiness", + "postalAddress" + ], + "type": "string" + }, + "locationUri": { + "description": "Optional URI representing the location.", + "type": [ + "string", + "null" + ] + }, + "uniqueId": { + "description": "For internal use only.", + "type": [ + "string", + "null" + ] + }, + "uniqueIdType": { + "enum": [ + "unknown", + "locationStore", + "directory", + "private", + "bing" + ], + "type": "string" + } + }, + "type": "object" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "recurrence": { + "additionalProperties": true, + "properties": { + "pattern": { + "additionalProperties": true, + "properties": { + "dayOfMonth": { + "description": "The day of the month on which the event occurs. Required if type is absoluteMonthly or absoluteYearly.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "daysOfWeek": { + "description": "A collection of the days of the week on which the event occurs. The possible values are: sunday, monday, tuesday, wednesday, thursday, friday, saturday. If type is relativeMonthly or relativeYearly, and daysOfWeek specifies more than one day, the event falls on the first day that satisfies the pattern. Required if type is weekly, relativeMonthly, or relativeYearly.", + "items": { + "anyOf": [ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } + ] + }, + "type": "array" + }, + "firstDayOfWeek": { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + "index": { + "enum": [ + "first", + "second", + "third", + "fourth", + "last" + ], + "type": "string" + }, + "interval": { + "description": "The number of units between occurrences, where units can be in days, weeks, months, or years, depending on the type. Required.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "month": { + "description": "The month in which the event occurs. This is a number from 1 to 12.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "type": { + "enum": [ + "daily", + "weekly", + "absoluteMonthly", + "relativeMonthly", + "absoluteYearly", + "relativeYearly" + ], + "type": "string" + } + }, + "type": "object" + }, + "range": { + "additionalProperties": true, + "properties": { + "endDate": { + "anyOf": [ + { + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to stop applying the recurrence pattern. Depending on the recurrence pattern of the event, the last occurrence of the meeting may not be this date. Required if type is endDate." + }, + "numberOfOccurrences": { + "description": "The number of times to repeat the event. Required and must be positive if type is numbered.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + "recurrenceTimeZone": { + "description": "Time zone for the startDate and endDate properties. Optional. If not specified, the time zone of the event is used.", + "type": [ + "string", + "null" + ] + }, + "startDate": { + "anyOf": [ + { + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required.", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date to start applying the recurrence pattern. The first occurrence of the meeting may be this date or later, depending on the recurrence pattern of the event. Must be the same value as the start property of the recurring event. Required." + }, + "type": { + "enum": [ + "endDate", + "noEnd", + "numbered" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "reminderMinutesBeforeStart": { + "anyOf": [ + { + "description": "The number of minutes before the event start time that the reminder alert occurs.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The number of minutes before the event start time that the reminder alert occurs." + }, + "responseRequested": { + "description": "Default is true, which represents the organizer would like an invitee to send a response to the event.", + "type": [ + "boolean", + "null" + ] + }, + "sensitivity": { + "enum": [ + "normal", + "personal", + "private", + "confidential" + ], + "type": "string" + }, + "showAs": { + "enum": [ + "unknown", + "free", + "tentative", + "busy", + "oof", + "workingElsewhere" + ], + "type": "string" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the event. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "start": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "subject": { + "description": "The text of the event's subject line.", + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "singleInstance", + "occurrence", + "exception", + "seriesMaster" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / events / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / multiValueExtendedProperties / items / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / multiValueExtendedProperties / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / multiValueExtendedProperties / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / multiValueExtendedProperties / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / owner / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / owner / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / owner / propertiesAdded value: +{ + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / owner / typeAdded value: +"object" - removed
Input schema / properties / body / properties / singleValueExtendedProperties / items / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / singleValueExtendedProperties / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / singleValueExtendedProperties / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / singleValueExtendedProperties / items / typeAdded value: +"object"
- Changed
update-calendar-event21 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - "def1": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / typeAdded value: +"object" - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / typeAdded value: +"object" - removed
Input schema / properties / body / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / end / typeAdded value: +"object" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / start / typeAdded value: +"object"
- Changed
update-mail-message29 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / bccRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / bccRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / bccRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / bccRecipients / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / ccRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / ccRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / ccRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / ccRecipients / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / flag / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / flag / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / flag / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / flag / properties / dueDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / flag / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / flag / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / flag / properties / dueDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / flag / properties / startDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / flag / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / flag / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / flag / properties / startDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / from / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / from / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / from / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / from / typeAdded value: +"object" - removed
Input schema / properties / body / properties / toRecipients / items / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / toRecipients / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / toRecipients / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / toRecipients / items / typeAdded value: +"object"
- Changed
update-mail-rule180 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - }, - "def1": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "def10": { - "description": "Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def11": { - "description": "Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def12": { - "description": "Indicates whether an incoming message must be encrypted in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def13": { - "description": "Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def14": { - "description": "Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def15": { - "description": "Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def16": { - "description": "Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def17": { - "description": "Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def18": { - "description": "Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def19": { - "description": "Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def2": { - "description": "Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def20": { - "enum": [ - "any", - "call", - "doNotForward", - "followUp", - "fyi", - "forward", - "noResponseNecessary", - "read", - "reply", - "replyToAll", - "review" - ], - "type": "string" - }, - "def21": { - "description": "Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def22": { - "description": "Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def23": { - "description": "Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def24": { - "enum": [ - "normal", - "personal", - "private", - "confidential" - ], - "type": "string" - }, - "def25": { - "description": "Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def26": { - "description": "Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def3": { - "description": "Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def4": { - "description": "Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def5": { - "description": "Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply.", - "items": { - "$ref": "#/$defs/def0" - }, - "type": "array" - }, - "def6": { - "description": "Indicates whether an incoming message must have attachments in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - }, - "def7": { - "description": "Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "def8": { - "$ref": "#/$defs/def1" - }, - "def9": { - "description": "Indicates whether an incoming message must be an approval request in order for the condition or exception to apply.", - "type": [ - "boolean", - "null" - ] - } -} - removed
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / actions / properties / forwardAsAttachmentTo / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / actions / properties / forwardTo / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / actions / properties / forwardTo / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / actions / properties / forwardTo / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / actions / properties / forwardTo / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / actions / properties / markImportance / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / actions / properties / markImportance / enumAdded value: +[ + "low", + "normal", + "high" +] - added
Input schema / properties / body / properties / actions / properties / markImportance / typeAdded value: +"string" - removed
Input schema / properties / body / properties / actions / properties / redirectTo / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / actions / properties / redirectTo / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / actions / properties / redirectTo / items / propertiesAdded value: +{ + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / actions / properties / redirectTo / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / conditions / properties / bodyContains / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / conditions / properties / bodyContains / descriptionAdded value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / bodyContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / bodyContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / descriptionAdded value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / bodyOrSubjectContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / categories / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / conditions / properties / categories / descriptionAdded value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / categories / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / categories / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / fromAddresses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / conditions / properties / fromAddresses / descriptionAdded value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / fromAddresses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / conditions / properties / fromAddresses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / hasAttachments / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / conditions / properties / hasAttachments / descriptionAdded value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / hasAttachments / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / headerContains / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / conditions / properties / headerContains / descriptionAdded value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / headerContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / headerContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / importance / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / conditions / properties / importance / enumAdded value: +[ + "low", + "normal", + "high" +] - added
Input schema / properties / body / properties / conditions / properties / importance / typeAdded value: +"string" - removed
Input schema / properties / body / properties / conditions / properties / isApprovalRequest / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / conditions / properties / isApprovalRequest / descriptionAdded value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isApprovalRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isAutomaticForward / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / conditions / properties / isAutomaticForward / descriptionAdded value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isAutomaticForward / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isAutomaticReply / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / conditions / properties / isAutomaticReply / descriptionAdded value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isAutomaticReply / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isEncrypted / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / conditions / properties / isEncrypted / descriptionAdded value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isEncrypted / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isMeetingRequest / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / conditions / properties / isMeetingRequest / descriptionAdded value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isMeetingRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isMeetingResponse / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / conditions / properties / isMeetingResponse / descriptionAdded value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isMeetingResponse / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isNonDeliveryReport / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / conditions / properties / isNonDeliveryReport / descriptionAdded value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isNonDeliveryReport / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isPermissionControlled / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / conditions / properties / isPermissionControlled / descriptionAdded value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isPermissionControlled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isReadReceipt / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / conditions / properties / isReadReceipt / descriptionAdded value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isReadReceipt / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isSigned / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / conditions / properties / isSigned / descriptionAdded value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isSigned / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / isVoicemail / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / conditions / properties / isVoicemail / descriptionAdded value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / isVoicemail / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / messageActionFlag / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / conditions / properties / messageActionFlag / enumAdded value: +[ + "any", + "call", + "doNotForward", + "followUp", + "fyi", + "forward", + "noResponseNecessary", + "read", + "reply", + "replyToAll", + "review" +] - added
Input schema / properties / body / properties / conditions / properties / messageActionFlag / typeAdded value: +"string" - removed
Input schema / properties / body / properties / conditions / properties / notSentToMe / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / conditions / properties / notSentToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / notSentToMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / recipientContains / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / conditions / properties / recipientContains / descriptionAdded value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / recipientContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / recipientContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / senderContains / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / conditions / properties / senderContains / descriptionAdded value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / senderContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / conditions / properties / senderContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / conditions / properties / sensitivity / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / conditions / properties / sensitivity / enumAdded value: +[ + "normal", + "personal", + "private", + "confidential" +] - added
Input schema / properties / body / properties / conditions / properties / sensitivity / typeAdded value: +"string" - removed
Input schema / properties / body / properties / conditions / properties / sentCcMe / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / conditions / properties / sentCcMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / sentCcMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / conditions / properties / sentOnlyToMe / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / conditions / properties / sentOnlyToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / conditions / properties / sentOnlyToMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / bodyContains / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / exceptions / properties / bodyContains / descriptionAdded value: +"Represents the strings that should appear in the body of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / bodyContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / bodyContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / $refRemoved value: -"#/$defs/def3" - added
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / descriptionAdded value: +"Represents the strings that should appear in the body or subject of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / bodyOrSubjectContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / categories / $refRemoved value: -"#/$defs/def4" - added
Input schema / properties / body / properties / exceptions / properties / categories / descriptionAdded value: +"Represents the categories that an incoming message should be labeled with in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / categories / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / categories / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / fromAddresses / $refRemoved value: -"#/$defs/def5" - added
Input schema / properties / body / properties / exceptions / properties / fromAddresses / descriptionAdded value: +"Represents the specific sender email addresses of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / fromAddresses / itemsAdded value: +{ + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Input schema / properties / body / properties / exceptions / properties / fromAddresses / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / hasAttachments / $refRemoved value: -"#/$defs/def6" - added
Input schema / properties / body / properties / exceptions / properties / hasAttachments / descriptionAdded value: +"Indicates whether an incoming message must have attachments in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / hasAttachments / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / headerContains / $refRemoved value: -"#/$defs/def7" - added
Input schema / properties / body / properties / exceptions / properties / headerContains / descriptionAdded value: +"Represents the strings that appear in the headers of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / headerContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / headerContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / importance / $refRemoved value: -"#/$defs/def8" - added
Input schema / properties / body / properties / exceptions / properties / importance / enumAdded value: +[ + "low", + "normal", + "high" +] - added
Input schema / properties / body / properties / exceptions / properties / importance / typeAdded value: +"string" - removed
Input schema / properties / body / properties / exceptions / properties / isApprovalRequest / $refRemoved value: -"#/$defs/def9" - added
Input schema / properties / body / properties / exceptions / properties / isApprovalRequest / descriptionAdded value: +"Indicates whether an incoming message must be an approval request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isApprovalRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isAutomaticForward / $refRemoved value: -"#/$defs/def10" - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticForward / descriptionAdded value: +"Indicates whether an incoming message must be automatically forwarded in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticForward / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isAutomaticReply / $refRemoved value: -"#/$defs/def11" - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticReply / descriptionAdded value: +"Indicates whether an incoming message must be an auto reply in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isAutomaticReply / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isEncrypted / $refRemoved value: -"#/$defs/def12" - added
Input schema / properties / body / properties / exceptions / properties / isEncrypted / descriptionAdded value: +"Indicates whether an incoming message must be encrypted in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isEncrypted / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isMeetingRequest / $refRemoved value: -"#/$defs/def13" - added
Input schema / properties / body / properties / exceptions / properties / isMeetingRequest / descriptionAdded value: +"Indicates whether an incoming message must be a meeting request in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isMeetingRequest / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isMeetingResponse / $refRemoved value: -"#/$defs/def14" - added
Input schema / properties / body / properties / exceptions / properties / isMeetingResponse / descriptionAdded value: +"Indicates whether an incoming message must be a meeting response in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isMeetingResponse / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / $refRemoved value: -"#/$defs/def15" - added
Input schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / descriptionAdded value: +"Indicates whether an incoming message must be a non-delivery report in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isNonDeliveryReport / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isPermissionControlled / $refRemoved value: -"#/$defs/def16" - added
Input schema / properties / body / properties / exceptions / properties / isPermissionControlled / descriptionAdded value: +"Indicates whether an incoming message must be permission controlled (RMS-protected) in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isPermissionControlled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isReadReceipt / $refRemoved value: -"#/$defs/def17" - added
Input schema / properties / body / properties / exceptions / properties / isReadReceipt / descriptionAdded value: +"Indicates whether an incoming message must be a read receipt in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isReadReceipt / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isSigned / $refRemoved value: -"#/$defs/def18" - added
Input schema / properties / body / properties / exceptions / properties / isSigned / descriptionAdded value: +"Indicates whether an incoming message must be S/MIME-signed in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isSigned / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / isVoicemail / $refRemoved value: -"#/$defs/def19" - added
Input schema / properties / body / properties / exceptions / properties / isVoicemail / descriptionAdded value: +"Indicates whether an incoming message must be a voice mail in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / isVoicemail / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / messageActionFlag / $refRemoved value: -"#/$defs/def20" - added
Input schema / properties / body / properties / exceptions / properties / messageActionFlag / enumAdded value: +[ + "any", + "call", + "doNotForward", + "followUp", + "fyi", + "forward", + "noResponseNecessary", + "read", + "reply", + "replyToAll", + "review" +] - added
Input schema / properties / body / properties / exceptions / properties / messageActionFlag / typeAdded value: +"string" - removed
Input schema / properties / body / properties / exceptions / properties / notSentToMe / $refRemoved value: -"#/$defs/def21" - added
Input schema / properties / body / properties / exceptions / properties / notSentToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must not be a recipient of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / notSentToMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / recipientContains / $refRemoved value: -"#/$defs/def22" - added
Input schema / properties / body / properties / exceptions / properties / recipientContains / descriptionAdded value: +"Represents the strings that appear in either the toRecipients or ccRecipients properties of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / recipientContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / recipientContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / senderContains / $refRemoved value: -"#/$defs/def23" - added
Input schema / properties / body / properties / exceptions / properties / senderContains / descriptionAdded value: +"Represents the strings that appear in the from property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / senderContains / itemsAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / body / properties / exceptions / properties / senderContains / typeAdded value: +"array" - removed
Input schema / properties / body / properties / exceptions / properties / sensitivity / $refRemoved value: -"#/$defs/def24" - added
Input schema / properties / body / properties / exceptions / properties / sensitivity / enumAdded value: +[ + "normal", + "personal", + "private", + "confidential" +] - added
Input schema / properties / body / properties / exceptions / properties / sensitivity / typeAdded value: +"string" - removed
Input schema / properties / body / properties / exceptions / properties / sentCcMe / $refRemoved value: -"#/$defs/def25" - added
Input schema / properties / body / properties / exceptions / properties / sentCcMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be in the ccRecipients property of an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / sentCcMe / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / body / properties / exceptions / properties / sentOnlyToMe / $refRemoved value: -"#/$defs/def26" - added
Input schema / properties / body / properties / exceptions / properties / sentOnlyToMe / descriptionAdded value: +"Indicates whether the owner of the mailbox must be the only recipient in an incoming message in order for the condition or exception to apply." - added
Input schema / properties / body / properties / exceptions / properties / sentOnlyToMe / typeAdded value: +[ + "boolean", + "null" +]
- Changed
update-mailbox-settings9 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledEndDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / automaticRepliesSetting / properties / scheduledStartDateTime / typeAdded value: +"object"
- Changed
update-my-calendar-permission5 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "none", - "freeBusyRead", - "limitedRead", - "read", - "write", - "delegateWithoutPrivateEventAccess", - "delegateWithPrivateEventAccess", - "custom" - ], - "type": "string" - } -} - changed
Input schema / properties / body / properties / allowedRoles / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / role / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / role / enumAdded value: +[ + "none", + "freeBusyRead", + "limitedRead", + "read", + "write", + "delegateWithoutPrivateEventAccess", + "delegateWithPrivateEventAccess", + "custom" +] - added
Input schema / properties / body / properties / role / typeAdded value: +"string"
- Changed
update-outlook-contact9 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "city": { - "description": "The city.", - "type": [ - "string", - "null" - ] - }, - "countryOrRegion": { - "description": "The country or region. It's a free-format string value, for example, 'United States'.", - "type": [ - "string", - "null" - ] - }, - "postalCode": { - "description": "The postal code.", - "type": [ - "string", - "null" - ] - }, - "state": { - "description": "The state.", - "type": [ - "string", - "null" - ] - }, - "street": { - "description": "The street.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / businessAddress / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / businessAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / businessAddress / propertiesAdded value: +{ + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / businessAddress / typeAdded value: +"object" - removed
Input schema / properties / body / properties / homeAddress / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / homeAddress / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / homeAddress / propertiesAdded value: +{ + "city": { + "description": "The city.", + "type": [ + "string", + "null" + ] + }, + "countryOrRegion": { + "description": "The country or region. It's a free-format string value, for example, 'United States'.", + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "description": "The postal code.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state.", + "type": [ + "string", + "null" + ] + }, + "street": { + "description": "The street.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / homeAddress / typeAdded value: +"object"
- Changed
update-planner-bucket15 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def2": { - "enum": [ - "automatic", - "noPreview", - "checklist", - "description", - "reference" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / typeAdded value: +"string" - removed
Input schema / properties / body / properties / tasks / items / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / tasks / items / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / tasks / items / properties / previewType / typeAdded value: +"string"
- Changed
update-planner-task15 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "application": { - "$ref": "#/$defs/def1" - }, - "device": { - "$ref": "#/$defs/def1" - }, - "user": { - "$ref": "#/$defs/def1" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def2": { - "enum": [ - "automatic", - "noPreview", - "checklist", - "description", - "reference" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / completedBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / completedBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / completedBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / completedBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / createdBy / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / createdBy / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / createdBy / propertiesAdded value: +{ + "application": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "device": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "user": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / createdBy / typeAdded value: +"object" - removed
Input schema / properties / body / properties / details / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / details / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / details / properties / previewType / typeAdded value: +"string" - removed
Input schema / properties / body / properties / previewType / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / previewType / enumAdded value: +[ + "automatic", + "noPreview", + "checklist", + "description", + "reference" +] - added
Input schema / properties / body / properties / previewType / typeAdded value: +"string"
- Changed
update-specific-calendar-event21 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - "def1": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / end / typeAdded value: +"object" - removed
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / attendees / items / properties / proposedNewTime / properties / start / typeAdded value: +"object" - removed
Input schema / properties / body / properties / end / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / end / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / end / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / end / typeAdded value: +"object" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def0" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / start / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / start / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / start / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / start / typeAdded value: +"object"
- Changed
update-todo-task21 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def1": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / completedDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / dueDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / dueDateTime / typeAdded value: +"object" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def1" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / reminderDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / reminderDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / reminderDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / reminderDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / startDateTime / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / startDateTime / typeAdded value: +"object"
- Changed
update-todo-task-list29 fields changed- removed
Input schema / $defsRemoved value: -{ - "def0": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - } - }, - "type": "object" - }, - "def1": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "def2": { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / extensions / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / extensions / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / extensions / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + } +} - added
Input schema / properties / body / properties / extensions / items / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / completedDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / dueDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / extensions / items / $refRemoved value: -"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / extensions / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / extensions / items / propertiesAdded value: +{ + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / extensions / items / typeAdded value: +"object" - changed
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "$ref": "#/$defs/def2" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - removed
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refRemoved value: -"#/$defs/def2" - added
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / enumAdded value: +[ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" +] - added
Input schema / properties / body / properties / tasks / items / properties / recurrence / properties / pattern / properties / firstDayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / reminderDateTime / typeAdded value: +"object" - removed
Input schema / properties / body / properties / tasks / items / properties / startDateTime / $refRemoved value: -"#/$defs/def1" - added
Input schema / properties / body / properties / tasks / items / properties / startDateTime / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / tasks / items / properties / startDateTime / propertiesAdded value: +{ + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / tasks / items / properties / startDateTime / typeAdded value: +"object"
2 tool updates
v0.137.0- Changed
create-onedrive-folder2 fields changed- changed
Input schema / properties / body / properties / createdByUser / descriptionPrevious value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]" - changed
Input schema / properties / body / properties / lastModifiedByUser / descriptionPrevious value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]"
- Changed
move-rename-onedrive-item2 fields changed- changed
Input schema / properties / body / properties / createdByUser / descriptionPrevious value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]" - changed
Input schema / properties / body / properties / lastModifiedByUser / descriptionPrevious value: -"[Note: Simplified from 136 properties to 25 most common ones]"New value: +"[Note: Simplified from 137 properties to 25 most common ones]"
4 tool updates
v0.135.0- Added
create-todo-task-list - Added
delete-todo-task-list - Added
list-todo-tasks - Added
update-todo-task-list
180 tool updates
v0.134.4- Added
accept-calendar-event - Added
add-excel-table-rows - Changed
add-mail-attachment1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
cancel-calendar-event - Added
clear-excel-range - Added
copy-drive-item - Changed
copy-mail-message1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
create-calendar - Added
create-calendar-event - Added
create-contact-child-folder - Added
create-contact-folder - Added
create-contact-in-folder - Changed
create-draft-email14 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / bccRecipients / items / $refPrevious value: -"#/properties/body/properties/from"New value: +"#/$defs/def1" - changed
Input schema / properties / body / properties / ccRecipients / items / $refPrevious value: -"#/properties/body/properties/from"New value: +"#/$defs/def1" - added
Input schema / properties / body / properties / flag / properties / completedDateTime / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / propertiesRemoved value: -{ - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / flag / properties / dueDateTime / $refPrevious value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / flag / properties / startDateTime / $refPrevious value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / from / $refAdded value: +"#/$defs/def1" - removed
Input schema / properties / body / properties / from / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / from / propertiesRemoved value: -{ - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / from / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / toRecipients / items / $refPrevious value: -"#/properties/body/properties/from"New value: +"#/$defs/def1"
- Added
create-drive-item-preview - Added
create-drive-item-share-link - Added
create-excel-chart - Changed
create-excel-table3 fields changed- changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / driveItemId / descriptionPrevious value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph." - changed
Input schema / properties / workbookWorksheetId / descriptionPrevious value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
- Changed
create-forward-draft7 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "dueDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "$ref": "#/$defs/def0" + }, + "dueDateTime": { + "$ref": "#/$defs/def0" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + "from": { + "$ref": "#/$defs/def1" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - added
Input schema / properties / body / properties / ToRecipients / items / $refAdded value: +"#/$defs/def1" - removed
Input schema / properties / body / properties / ToRecipients / items / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / ToRecipients / items / propertiesRemoved value: -{ - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / ToRecipients / items / typeRemoved value: -"object" - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Changed
create-mail-attachment-upload-session1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
create-mail-child-folder - Added
create-mail-folder - Added
create-mail-rule - Added
create-my-calendar-permission - Added
create-onedrive-folder - Changed
create-onenote-notebook18 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def1" + }, + "device": { + "$ref": "#/$defs/def1" + }, + "user": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def3" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def3" + } + }, + "type": "object" + }, + "def3": { + "additionalProperties": true, + "properties": { + "href": { + "description": "The URL of the link.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def4": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def0" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedBy": { + "$ref": "#/$defs/def0" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "parentNotebook": { + "$ref": "#/$defs/def5" + }, + "parentSectionGroup": { + "$ref": "#/$defs/def4" + }, + "sectionGroups": { + "description": "The section groups in the section. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def4" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the section group. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def6" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def5": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def0" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default notebook. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "isShared": { + "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/$defs/def0" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "$ref": "#/$defs/def2" + }, + "sectionGroups": { + "description": "The section groups in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def4" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def6" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "userRole": { + "$ref": "#/$defs/def7" + } + }, + "type": "object" + }, + "def6": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def0" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default section. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/$defs/def0" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def3" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def3" + } + }, + "type": "object" + }, + "pages": { + "description": "The collection of pages in the section. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The page's HTML content.", + "type": [ + "string", + "null" + ] + }, + "contentUrl": { + "description": "The URL for the page's HTML content. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdByAppId": { + "description": "The unique identifier of the application that created the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "level": { + "anyOf": [ + { + "description": "The indentation level of the page. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The indentation level of the page. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def3" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def3" + } + }, + "type": "object" + }, + "order": { + "anyOf": [ + { + "description": "The order of the page within its parent section. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The order of the page within its parent section. Read-only." + }, + "parentNotebook": { + "$ref": "#/$defs/def5" + }, + "parentSection": { + "$ref": "#/$defs/def6" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "The title of the page.", + "type": [ + "string", + "null" + ] + }, + "userTags": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "pagesUrl": { + "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", + "type": [ + "string", + "null" + ] + }, + "parentNotebook": { + "$ref": "#/$defs/def5" + }, + "parentSectionGroup": { + "$ref": "#/$defs/def4" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def7": { + "enum": [ + "None", + "Owner", + "Contributor", + "Reader" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / createdBy / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / createdBy / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / createdBy / propertiesRemoved value: -{ - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/createdBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/createdBy/properties/application" - } -} - removed
Input schema / properties / body / properties / createdBy / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / lastModifiedBy / $refPrevious value: -"#/properties/body/properties/createdBy"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / links / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / links / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / links / propertiesRemoved value: -{ - "oneNoteClientUrl": { - "additionalProperties": true, - "properties": { - "href": { - "description": "The URL of the link.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } -} - removed
Input schema / properties / body / properties / links / typeRemoved value: -"object" - added
Input schema / properties / body / properties / sectionGroups / items / $refAdded value: +"#/$defs/def4" - removed
Input schema / properties / body / properties / sectionGroups / items / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / sectionGroups / items / propertiesRemoved value: -{ - "createdBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "parentNotebook": { - "additionalProperties": true, - "properties": { - "createdBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default notebook. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "isShared": { - "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "$ref": "#/properties/body/properties/links" - }, - "sectionGroups": { - "description": "The section groups in the notebook. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/sectionGroups/items" - }, - "type": "array" - }, - "sectionGroupsUrl": { - "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "The sections in the notebook. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "createdBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default section. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "pages": { - "description": "The collection of pages in the section. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The page's HTML content.", - "type": [ - "string", - "null" - ] - }, - "contentUrl": { - "description": "The URL for the page's HTML content. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdByAppId": { - "description": "The unique identifier of the application that created the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "level": { - "anyOf": [ - { - "description": "The indentation level of the page. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The indentation level of the page. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "order": { - "anyOf": [ - { - "description": "The order of the page within its parent section. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The order of the page within its parent section. Read-only." - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook" - }, - "parentSection": { - "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "title": { - "description": "The title of the page.", - "type": [ - "string", - "null" - ] - }, - "userTags": { - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "pagesUrl": { - "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", - "type": [ - "string", - "null" - ] - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/sectionGroups/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "sectionsUrl": { - "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", - "type": [ - "string", - "null" - ] - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "userRole": { - "$ref": "#/properties/body/properties/userRole" - } - }, - "type": "object" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/sectionGroups/items" - }, - "sectionGroups": { - "description": "The section groups in the section. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/sectionGroups/items" - }, - "type": "array" - }, - "sectionGroupsUrl": { - "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "The sections in the section group. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items" - }, - "type": "array" - }, - "sectionsUrl": { - "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.", - "type": [ - "string", - "null" - ] - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / sectionGroups / items / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / sections / items / $refPrevious value: -"#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"New value: +"#/$defs/def6" - added
Input schema / properties / body / properties / userRole / $refAdded value: +"#/$defs/def7" - removed
Input schema / properties / body / properties / userRole / enumRemoved value: -[ - "None", - "Owner", - "Contributor", - "Reader" -] - removed
Input schema / properties / body / properties / userRole / typeRemoved value: -"string"
- Changed
create-onenote-page10 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def1" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "href": { + "description": "The URL of the link.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def3" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default notebook. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "isShared": { + "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/$defs/def3" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def1" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "sectionGroups": { + "description": "The section groups in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def5" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def6" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "userRole": { + "enum": [ + "None", + "Owner", + "Contributor", + "Reader" + ], + "type": "string" + } + }, + "type": "object" + }, + "def3": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def4" + }, + "device": { + "$ref": "#/$defs/def4" + }, + "user": { + "$ref": "#/$defs/def4" + } + }, + "type": "object" + }, + "def4": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def5": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def3" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedBy": { + "$ref": "#/$defs/def3" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "parentNotebook": { + "$ref": "#/$defs/def2" + }, + "parentSectionGroup": { + "$ref": "#/$defs/def5" + }, + "sectionGroups": { + "description": "The section groups in the section. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def5" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the section group. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def6" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def6": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def3" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default section. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/$defs/def3" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def1" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "pages": { + "description": "The collection of pages in the section. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The page's HTML content.", + "type": [ + "string", + "null" + ] + }, + "contentUrl": { + "description": "The URL for the page's HTML content. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdByAppId": { + "description": "The unique identifier of the application that created the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "level": { + "anyOf": [ + { + "description": "The indentation level of the page. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The indentation level of the page. Read-only." + }, + "links": { + "$ref": "#/$defs/def0" + }, + "order": { + "anyOf": [ + { + "description": "The order of the page within its parent section. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The order of the page within its parent section. Read-only." + }, + "parentNotebook": { + "$ref": "#/$defs/def2" + }, + "parentSection": { + "$ref": "#/$defs/def6" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "The title of the page.", + "type": [ + "string", + "null" + ] + }, + "userTags": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "pagesUrl": { + "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", + "type": [ + "string", + "null" + ] + }, + "parentNotebook": { + "$ref": "#/$defs/def2" + }, + "parentSectionGroup": { + "$ref": "#/$defs/def5" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / links / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / links / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / links / propertiesRemoved value: -{ - "oneNoteClientUrl": { - "additionalProperties": true, - "properties": { - "href": { - "description": "The URL of the link.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } -} - removed
Input schema / properties / body / properties / links / typeRemoved value: -"object" - added
Input schema / properties / body / properties / parentNotebook / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / parentNotebook / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / parentNotebook / propertiesRemoved value: -{ - "createdBy": { - "additionalProperties": true, - "properties": { - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application" - } - }, - "type": "object" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default notebook. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "isShared": { - "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "sectionGroups": { - "description": "The section groups in the notebook. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "createdBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/parentNotebook" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items" - }, - "sectionGroups": { - "description": "The section groups in the section. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items" - }, - "type": "array" - }, - "sectionGroupsUrl": { - "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "The sections in the section group. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "createdBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default section. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "pages": { - "description": "The collection of pages in the section. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The page's HTML content.", - "type": [ - "string", - "null" - ] - }, - "contentUrl": { - "description": "The URL for the page's HTML content. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdByAppId": { - "description": "The unique identifier of the application that created the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "level": { - "anyOf": [ - { - "description": "The indentation level of the page. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The indentation level of the page. Read-only." - }, - "links": { - "$ref": "#/properties/body/properties/links" - }, - "order": { - "anyOf": [ - { - "description": "The order of the page within its parent section. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The order of the page within its parent section. Read-only." - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/parentNotebook" - }, - "parentSection": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "title": { - "description": "The title of the page.", - "type": [ - "string", - "null" - ] - }, - "userTags": { - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "pagesUrl": { - "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", - "type": [ - "string", - "null" - ] - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/parentNotebook" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "sectionsUrl": { - "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.", - "type": [ - "string", - "null" - ] - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "sectionGroupsUrl": { - "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "The sections in the notebook. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" - }, - "type": "array" - }, - "sectionsUrl": { - "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", - "type": [ - "string", - "null" - ] - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "userRole": { - "enum": [ - "None", - "Owner", - "Contributor", - "Reader" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / parentNotebook / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / parentSection / $refPrevious value: -"#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"New value: +"#/$defs/def6"
- Added
create-onenote-section - Changed
create-onenote-section-page11 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def1" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "href": { + "description": "The URL of the link.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def3" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default notebook. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "isShared": { + "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/$defs/def3" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def1" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "sectionGroups": { + "description": "The section groups in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def5" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def6" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "userRole": { + "enum": [ + "None", + "Owner", + "Contributor", + "Reader" + ], + "type": "string" + } + }, + "type": "object" + }, + "def3": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def4" + }, + "device": { + "$ref": "#/$defs/def4" + }, + "user": { + "$ref": "#/$defs/def4" + } + }, + "type": "object" + }, + "def4": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def5": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def3" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedBy": { + "$ref": "#/$defs/def3" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "parentNotebook": { + "$ref": "#/$defs/def2" + }, + "parentSectionGroup": { + "$ref": "#/$defs/def5" + }, + "sectionGroups": { + "description": "The section groups in the section. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def5" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the section group. Read-only. Nullable.", + "items": { + "$ref": "#/$defs/def6" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def6": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/$defs/def3" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default section. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/$defs/def3" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/$defs/def1" + }, + "oneNoteWebUrl": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "pages": { + "description": "The collection of pages in the section. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The page's HTML content.", + "type": [ + "string", + "null" + ] + }, + "contentUrl": { + "description": "The URL for the page's HTML content. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdByAppId": { + "description": "The unique identifier of the application that created the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "level": { + "anyOf": [ + { + "description": "The indentation level of the page. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The indentation level of the page. Read-only." + }, + "links": { + "$ref": "#/$defs/def0" + }, + "order": { + "anyOf": [ + { + "description": "The order of the page within its parent section. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The order of the page within its parent section. Read-only." + }, + "parentNotebook": { + "$ref": "#/$defs/def2" + }, + "parentSection": { + "$ref": "#/$defs/def6" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "The title of the page.", + "type": [ + "string", + "null" + ] + }, + "userTags": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "pagesUrl": { + "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", + "type": [ + "string", + "null" + ] + }, + "parentNotebook": { + "$ref": "#/$defs/def2" + }, + "parentSectionGroup": { + "$ref": "#/$defs/def5" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / links / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / links / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / links / propertiesRemoved value: -{ - "oneNoteClientUrl": { - "additionalProperties": true, - "properties": { - "href": { - "description": "The URL of the link.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } -} - removed
Input schema / properties / body / properties / links / typeRemoved value: -"object" - added
Input schema / properties / body / properties / parentNotebook / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / parentNotebook / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / parentNotebook / propertiesRemoved value: -{ - "createdBy": { - "additionalProperties": true, - "properties": { - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy/properties/application" - } - }, - "type": "object" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default notebook. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "isShared": { - "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "sectionGroups": { - "description": "The section groups in the notebook. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "createdBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/parentNotebook" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items" - }, - "sectionGroups": { - "description": "The section groups in the section. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items" - }, - "type": "array" - }, - "sectionGroupsUrl": { - "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the section group. Read-only.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "The sections in the section group. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "createdBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default section. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/parentNotebook/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "pages": { - "description": "The collection of pages in the section. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The page's HTML content.", - "type": [ - "string", - "null" - ] - }, - "contentUrl": { - "description": "The URL for the page's HTML content. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdByAppId": { - "description": "The unique identifier of the application that created the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "level": { - "anyOf": [ - { - "description": "The indentation level of the page. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The indentation level of the page. Read-only." - }, - "links": { - "$ref": "#/properties/body/properties/links" - }, - "order": { - "anyOf": [ - { - "description": "The order of the page within its parent section. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The order of the page within its parent section. Read-only." - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/parentNotebook" - }, - "parentSection": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "title": { - "description": "The title of the page.", - "type": [ - "string", - "null" - ] - }, - "userTags": { - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "pagesUrl": { - "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", - "type": [ - "string", - "null" - ] - }, - "parentNotebook": { - "$ref": "#/properties/body/properties/parentNotebook" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "sectionsUrl": { - "description": "The URL for the sections navigation property, which returns all the sections in the section group. Read-only.", - "type": [ - "string", - "null" - ] - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "sectionGroupsUrl": { - "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "The sections in the notebook. Read-only. Nullable.", - "items": { - "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" - }, - "type": "array" - }, - "sectionsUrl": { - "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", - "type": [ - "string", - "null" - ] - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "userRole": { - "enum": [ - "None", - "Owner", - "Contributor", - "Reader" - ], - "type": "string" - } -} - removed
Input schema / properties / body / properties / parentNotebook / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / parentSection / $refPrevious value: -"#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"New value: +"#/$defs/def6" - changed
Input schema / properties / onenoteSectionId / descriptionPrevious value: -"Path parameter: onenoteSectionId"New value: +"Value for the 'onenoteSectionId' path segment. Pass it under the name 'onenoteSectionId', not as 'id'. Use the 'id' field of the onenote section object as returned by Microsoft Graph."
- Added
create-outlook-contact - Changed
create-planner-bucket10 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def1" + }, + "device": { + "$ref": "#/$defs/def1" + }, + "user": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "enum": [ + "automatic", + "noPreview", + "checklist", + "description", + "reference" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / propertiesRemoved value: -{ - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application" - } -} - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / tasks / items / properties / createdBy / $refPrevious value: -"#/properties/body/properties/tasks/items/properties/completedBy"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enumRemoved value: -[ - "automatic", - "noPreview", - "checklist", - "description", - "reference" -] - removed
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / typeRemoved value: -"string" - changed
Input schema / properties / body / properties / tasks / items / properties / previewType / $refPrevious value: -"#/properties/body/properties/tasks/items/properties/details/properties/previewType"New value: +"#/$defs/def2"
- Changed
create-planner-task10 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def1" + }, + "device": { + "$ref": "#/$defs/def1" + }, + "user": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "enum": [ + "automatic", + "noPreview", + "checklist", + "description", + "reference" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / completedBy / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / completedBy / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / completedBy / propertiesRemoved value: -{ - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/completedBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/completedBy/properties/application" - } -} - removed
Input schema / properties / body / properties / completedBy / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / createdBy / $refPrevious value: -"#/properties/body/properties/completedBy"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / details / properties / previewType / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / details / properties / previewType / enumRemoved value: -[ - "automatic", - "noPreview", - "checklist", - "description", - "reference" -] - removed
Input schema / properties / body / properties / details / properties / previewType / typeRemoved value: -"string" - changed
Input schema / properties / body / properties / previewType / $refPrevious value: -"#/properties/body/properties/details/properties/previewType"New value: +"#/$defs/def2"
- Changed
create-planner-task-message7 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def1" + }, + "device": { + "$ref": "#/$defs/def1" + }, + "user": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - added
Input schema / properties / body / properties / createdBy / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / createdBy / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / createdBy / propertiesRemoved value: -{ - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity. For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/createdBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/createdBy/properties/application" - } -} - removed
Input schema / properties / body / properties / createdBy / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / reactions / items / properties / reactionEvents / items / properties / createdBy / $refPrevious value: -"#/properties/body/properties/createdBy"New value: +"#/$defs/def0" - changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Changed
create-reply-all-draft3 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "dueDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - } - }, - "type": "object" - }, - "from": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "$ref": "#/$defs/def0" + }, + "dueDateTime": { + "$ref": "#/$defs/def0" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + "from": { + "$ref": "#/$defs/def1" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Changed
create-reply-draft3 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "dueDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - } - }, - "type": "object" - }, - "from": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "$ref": "#/$defs/def0" + }, + "dueDateTime": { + "$ref": "#/$defs/def0" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + "from": { + "$ref": "#/$defs/def1" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
create-specific-calendar-event - Changed
create-todo-linked-resource2 fields changed- changed
Input schema / properties / todoTaskId / descriptionPrevious value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Changed
create-todo-task11 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / completedDateTime / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / completedDateTime / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / completedDateTime / propertiesRemoved value: -{ - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / completedDateTime / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / dueDateTime / $refPrevious value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/def1" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refPrevious value: -"#/properties/body/properties/recurrence/properties/pattern/properties/daysOfWeek/items/anyOf/0"New value: +"#/$defs/def1" - changed
Input schema / properties / body / properties / reminderDateTime / $refPrevious value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / startDateTime / $refPrevious value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Removed
create-todo-task-list - Added
create-upload-session - Added
decline-calendar-event - Added
delete-calendar - Added
delete-calendar-event - Changed
delete-contact-folder1 field changed- changed
Input schema / properties / contactFolderId / descriptionPrevious value: -"Path parameter: contactFolderId"New value: +"Value for the 'contactFolderId' path segment. Pass it under the name 'contactFolderId', not as 'id'. Use the 'id' field of the contact folder object as returned by Microsoft Graph."
- Added
delete-drive-item-permission - Added
delete-excel-range - Added
delete-excel-table-row - Added
delete-focused-inbox-override - Changed
delete-mail-attachment2 fields changed- changed
Input schema / properties / attachmentId / descriptionPrevious value: -"Path parameter: attachmentId"New value: +"Value for the 'attachmentId' path segment. Pass it under the name 'attachmentId', not as 'id'. Use the 'id' field of the attachment object as returned by Microsoft Graph." - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
delete-mail-folder - Changed
delete-mail-message1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
delete-mail-rule - Added
delete-my-calendar-permission - Added
delete-onedrive-file - Changed
delete-onenote-page1 field changed- changed
Input schema / properties / onenotePageId / descriptionPrevious value: -"Path parameter: onenotePageId"New value: +"Value for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph."
- Added
delete-outlook-contact - Changed
delete-planner-bucket1 field changed- changed
Input schema / properties / plannerBucketId / descriptionPrevious value: -"Path parameter: plannerBucketId"New value: +"Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph."
- Changed
delete-planner-task-message2 fields changed- changed
Input schema / properties / plannerTaskChatMessageId / descriptionPrevious value: -"Path parameter: plannerTaskChatMessageId"New value: +"Value for the 'plannerTaskChatMessageId' path segment. Pass it under the name 'plannerTaskChatMessageId', not as 'id'. Use the 'id' field of the planner task chat message object as returned by Microsoft Graph." - changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Added
delete-specific-calendar-event - Changed
delete-subscription1 field changed- changed
Input schema / properties / subscriptionId / descriptionPrevious value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
- Changed
delete-todo-linked-resource3 fields changed- changed
Input schema / properties / linkedResourceId / descriptionPrevious value: -"Path parameter: linkedResourceId"New value: +"Value for the 'linkedResourceId' path segment. Pass it under the name 'linkedResourceId', not as 'id'. Use the 'id' field of the linked resource object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskId / descriptionPrevious value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Changed
delete-todo-task2 fields changed- changed
Input schema / properties / todoTaskId / descriptionPrevious value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Removed
delete-todo-task-list - Added
dismiss-calendar-event-reminder - Added
download-bytes - Added
download-bytes-to-file - Changed
format-excel-range4 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Path parameter: address"New value: +"Value for the 'address' path segment." - changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / driveItemId / descriptionPrevious value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph." - changed
Input schema / properties / workbookWorksheetId / descriptionPrevious value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
- Added
format-excel-range-border - Added
format-excel-range-fill - Added
format-excel-range-font - Added
forward-calendar-event - Changed
forward-mail-message7 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "dueDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - } - }, - "type": "object" - }, - "from": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/ToRecipients/items" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "$ref": "#/$defs/def0" + }, + "dueDateTime": { + "$ref": "#/$defs/def0" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + "from": { + "$ref": "#/$defs/def1" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - added
Input schema / properties / body / properties / ToRecipients / items / $refAdded value: +"#/$defs/def1" - removed
Input schema / properties / body / properties / ToRecipients / items / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / ToRecipients / items / propertiesRemoved value: -{ - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / ToRecipients / items / typeRemoved value: -"object" - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
get-calendar-event - Added
get-calendar-view - Added
get-current-user - Added
get-drive-delta - Added
get-drive-item - Added
get-drive-root-item - Changed
get-excel-range4 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Path parameter: address"New value: +"Value for the 'address' path segment." - changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / driveItemId / descriptionPrevious value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph." - changed
Input schema / properties / workbookWorksheetId / descriptionPrevious value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
- Added
get-excel-range-format - Added
get-excel-table - Added
get-excel-used-range - Changed
get-mail-message2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Changed
get-mail-message-mime1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
get-mail-tips - Added
get-mailbox-settings - Changed
get-my-profile1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Changed
get-onenote-page-content1 field changed- changed
Input schema / properties / onenotePageId / descriptionPrevious value: -"Path parameter: onenotePageId"New value: +"Value for the 'onenotePageId' path segment. Pass it under the name 'onenotePageId', not as 'id'. Use the 'id' field of the onenote page object as returned by Microsoft Graph."
- Added
get-outlook-contact - Changed
get-planner-bucket2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerBucketId / descriptionPrevious value: -"Path parameter: plannerBucketId"New value: +"Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph."
- Changed
get-planner-plan2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerPlanId / descriptionPrevious value: -"Path parameter: plannerPlanId"New value: +"Value for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph."
- Changed
get-planner-task2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Changed
get-planner-task-details2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Added
get-specific-calendar-event - Added
get-specific-calendar-view - Changed
get-subscription1 field changed- changed
Input schema / properties / subscriptionId / descriptionPrevious value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
- Changed
get-todo-task3 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / todoTaskId / descriptionPrevious value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Added
graph-batch - Added
insert-excel-range - Added
list-accounts - Changed
list-all-onenote-sections1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Added
list-calendar-event-instances - Added
list-calendar-events - Added
list-calendar-events-delta - Added
list-calendar-view-delta - Added
list-calendars - Added
list-contact-folder-child-folders - Added
list-contact-folder-contacts - Added
list-contact-folders - Added
list-drive-item-permissions - Added
list-drive-item-thumbnails - Added
list-drive-item-versions - Added
list-drives - Added
list-excel-table-rows - Changed
list-excel-tables3 fields changed- changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / driveItemId / descriptionPrevious value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph." - changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Changed
list-excel-worksheets3 fields changed- changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / driveItemId / descriptionPrevious value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph." - changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Added
list-focused-inbox-overrides - Added
list-folder-files - Changed
list-mail-attachments2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
list-mail-child-folders - Added
list-mail-folder-messages - Added
list-mail-folder-messages-delta - Added
list-mail-folders - Changed
list-mail-messages1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Added
list-mail-rules - Added
list-my-calendar-permissions - Changed
list-onenote-notebook-sections2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / notebookId / descriptionPrevious value: -"Path parameter: notebookId"New value: +"Value for the 'notebookId' path segment. Pass it under the name 'notebookId', not as 'id'. Use the 'id' field of the notebook object as returned by Microsoft Graph."
- Changed
list-onenote-notebooks1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Changed
list-onenote-pages1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Changed
list-onenote-section-groups1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Changed
list-onenote-section-pages2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / onenoteSectionId / descriptionPrevious value: -"Path parameter: onenoteSectionId"New value: +"Value for the 'onenoteSectionId' path segment. Pass it under the name 'onenoteSectionId', not as 'id'. Use the 'id' field of the onenote section object as returned by Microsoft Graph."
- Changed
list-outlook-categories1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Added
list-outlook-contacts - Changed
list-plan-buckets2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerPlanId / descriptionPrevious value: -"Path parameter: plannerPlanId"New value: +"Value for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph."
- Changed
list-plan-tasks2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerPlanId / descriptionPrevious value: -"Path parameter: plannerPlanId"New value: +"Value for the 'plannerPlanId' path segment. Pass it under the name 'plannerPlanId', not as 'id'. Use the 'id' field of the planner plan object as returned by Microsoft Graph."
- Changed
list-planner-task-messages2 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Changed
list-planner-tasks1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Added
list-specific-calendar-events - Changed
list-subscriptions1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Changed
list-supported-time-zones1 field changed- changed
Input schema / properties / TimeZoneStandard / descriptionPrevious value: -"Path parameter: TimeZoneStandard"New value: +"Value for the 'TimeZoneStandard' path segment."
- Changed
list-todo-linked-resources3 fields changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / todoTaskId / descriptionPrevious value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Changed
list-todo-task-lists1 field changed- changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead."
- Removed
list-todo-tasks - Added
login - Added
logout - Added
merge-excel-range - Changed
move-mail-message1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
move-rename-onedrive-item - Changed
reauthorize-subscription1 field changed- changed
Input schema / properties / subscriptionId / descriptionPrevious value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
- Added
remove-account - Changed
reply-all-mail-message3 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "dueDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - } - }, - "type": "object" - }, - "from": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "$ref": "#/$defs/def0" + }, + "dueDateTime": { + "$ref": "#/$defs/def0" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + "from": { + "$ref": "#/$defs/def1" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Changed
reply-mail-message3 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "attachments": { - "description": "The fileAttachment and itemAttachment attachments for the message.", - "items": { - "additionalProperties": true, - "properties": { - "contentType": { - "description": "The MIME type.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isInline": { - "description": "true if the attachment is an inline attachment; otherwise, false.", - "type": "boolean" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "name": { - "description": "The attachment's file name.", - "type": [ - "string", - "null" - ] - }, - "size": { - "description": "The length of the attachment in bytes.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "bccRecipients": { - "description": "The Bcc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "body": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The content of the item.", - "type": [ - "string", - "null" - ] - }, - "contentType": { - "enum": [ - "text", - "html" - ], - "type": "string" - } - }, - "type": "object" - }, - "bodyPreview": { - "description": "The first 255 characters of the message body. It is in text format.", - "type": [ - "string", - "null" - ] - }, - "categories": { - "description": "The categories associated with the item", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - }, - "ccRecipients": { - "description": "The Cc: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - }, - "changeKey": { - "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", - "type": [ - "string", - "null" - ] - }, - "conversationId": { - "description": "The ID of the conversation the email belongs to.", - "type": [ - "string", - "null" - ] - }, - "conversationIndex": { - "description": "Indicates the position of the message within the conversation.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "flag": { - "additionalProperties": true, - "properties": { - "completedDateTime": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "dueDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - }, - "flagStatus": { - "enum": [ - "notFlagged", - "complete", - "flagged" - ], - "type": "string" - }, - "startDateTime": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/flag/properties/completedDateTime" - } - }, - "type": "object" - }, - "from": { - "additionalProperties": true, - "properties": { - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } - }, - "type": "object" - }, - "hasAttachments": { - "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", - "type": [ - "boolean", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "importance": { - "enum": [ - "low", - "normal", - "high" - ], - "type": "string" - }, - "inferenceClassification": { - "enum": [ - "focused", - "other" - ], - "type": "string" - }, - "internetMessageHeaders": { - "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", - "items": { - "additionalProperties": true, - "properties": { - "name": { - "description": "Represents the key in a key-value pair.", - "type": [ - "string", - "null" - ] - }, - "value": { - "description": "The value in a key-value pair.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "internetMessageId": { - "description": "The message ID in the format specified by RFC2822.", - "type": [ - "string", - "null" - ] - }, - "isDeliveryReceiptRequested": { - "description": "Indicates whether a read receipt is requested for the message.", - "type": [ - "boolean", - "null" - ] - }, - "isDraft": { - "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" - }, - "multiValueExtendedProperties": { - "description": "The collection of multi-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A collection of property values.", - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "singleValueExtendedProperties": { - "description": "The collection of single-value extended properties defined for the message. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "value": { - "description": "A property value.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "type": "array" - }, - "subject": { - "description": "The subject of the message.", - "type": [ - "string", - "null" - ] - }, - "toRecipients": { - "description": "The To: recipients for the message.", - "items": { - "$ref": "#/properties/body/properties/Message/anyOf/0/properties/from" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "attachments": { + "description": "The fileAttachment and itemAttachment attachments for the message.", + "items": { + "additionalProperties": true, + "properties": { + "contentType": { + "description": "The MIME type.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isInline": { + "description": "true if the attachment is an inline attachment; otherwise, false.", + "type": "boolean" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "name": { + "description": "The attachment's file name.", + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "The length of the attachment in bytes.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "bccRecipients": { + "description": "The Bcc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "body": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The content of the item.", + "type": [ + "string", + "null" + ] + }, + "contentType": { + "enum": [ + "text", + "html" + ], + "type": "string" + } + }, + "type": "object" + }, + "bodyPreview": { + "description": "The first 255 characters of the message body. It is in text format.", + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "The categories associated with the item", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "ccRecipients": { + "description": "The Cc: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + }, + "changeKey": { + "description": "Identifies the version of the item. Every time the item is changed, changeKey changes as well. This allows Exchange to apply changes to the correct version of the object. Read-only.", + "type": [ + "string", + "null" + ] + }, + "conversationId": { + "description": "The ID of the conversation the email belongs to.", + "type": [ + "string", + "null" + ] + }, + "conversationIndex": { + "description": "Indicates the position of the message within the conversation.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "flag": { + "additionalProperties": true, + "properties": { + "completedDateTime": { + "$ref": "#/$defs/def0" + }, + "dueDateTime": { + "$ref": "#/$defs/def0" + }, + "flagStatus": { + "enum": [ + "notFlagged", + "complete", + "flagged" + ], + "type": "string" + }, + "startDateTime": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + "from": { + "$ref": "#/$defs/def1" + }, + "hasAttachments": { + "description": "Indicates whether the message has attachments. This property doesn't include inline attachments, so if a message contains only inline attachments, this property is false. To verify the existence of inline attachments, parse the body property to look for a src attribute, such as <IMG src='cid:image001.jpg@01D26CD8.6C05F070'>.", + "type": [ + "boolean", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "importance": { + "enum": [ + "low", + "normal", + "high" + ], + "type": "string" + }, + "inferenceClassification": { + "enum": [ + "focused", + "other" + ], + "type": "string" + }, + "internetMessageHeaders": { + "description": "A collection of message headers defined by RFC5322. The set includes message headers indicating the network path taken by a message from the sender to the recipient. It can also contain custom message headers that hold app data for the message. Requires $select to retrieve. Read-only.", + "items": { + "additionalProperties": true, + "properties": { + "name": { + "description": "Represents the key in a key-value pair.", + "type": [ + "string", + "null" + ] + }, + "value": { + "description": "The value in a key-value pair.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "internetMessageId": { + "description": "The message ID in the format specified by RFC2822.", + "type": [ + "string", + "null" + ] + }, + "isDeliveryReceiptRequested": { + "description": "Indicates whether a read receipt is requested for the message.", + "type": [ + "boolean", + "null" + ] + }, + "isDraft": { + "description": "Indicates whether the message is a draft. A message is a draft if it hasn't been sent yet.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z" + }, + "multiValueExtendedProperties": { + "description": "The collection of multi-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A collection of property values.", + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "singleValueExtendedProperties": { + "description": "The collection of single-value extended properties defined for the message. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "value": { + "description": "A property value.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "subject": { + "description": "The subject of the message.", + "type": [ + "string", + "null" + ] + }, + "toRecipients": { + "description": "The To: recipients for the message.", + "items": { + "$ref": "#/$defs/def1" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Changed
search-onedrive-files3 fields changed- changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / expand / descriptionPrevious value: -"Expand related entities"New value: +"Navigation properties to inline, e.g. attachments on a message or event. Only navigation properties can be expanded: expanding a non-navigation property such as a message body fails with \"Parsing OData Select and Expand failed\", and an unsupported value may be ignored rather than reported. Request ordinary fields with $select instead." - changed
Input schema / properties / q / descriptionPrevious value: -"Path parameter: q"New value: +"Value for the 'q' path segment."
- Changed
send-draft-message1 field changed- changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Changed
send-mail14 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / Message / properties / bccRecipients / items / $refPrevious value: -"#/properties/body/properties/Message/properties/from"New value: +"#/$defs/def1" - changed
Input schema / properties / body / properties / Message / properties / ccRecipients / items / $refPrevious value: -"#/properties/body/properties/Message/properties/from"New value: +"#/$defs/def1" - added
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / propertiesRemoved value: -{ - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / Message / properties / flag / properties / completedDateTime / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / Message / properties / flag / properties / dueDateTime / $refPrevious value: -"#/properties/body/properties/Message/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / Message / properties / flag / properties / startDateTime / $refPrevious value: -"#/properties/body/properties/Message/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / Message / properties / from / $refAdded value: +"#/$defs/def1" - removed
Input schema / properties / body / properties / Message / properties / from / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / Message / properties / from / propertiesRemoved value: -{ - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / Message / properties / from / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / Message / properties / toRecipients / items / $refPrevious value: -"#/properties/body/properties/Message/properties/from"New value: +"#/$defs/def1"
- Added
share-drive-item - Added
snooze-calendar-event-reminder - Added
sort-excel-range - Changed
tentatively-accept-calendar-event3 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / ProposedNewTime / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "end": { - "additionalProperties": true, - "properties": { - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "start": { - "$ref": "#/properties/body/properties/ProposedNewTime/anyOf/0/properties/end" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "end": { + "$ref": "#/$defs/def0" + }, + "start": { + "$ref": "#/$defs/def0" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / eventId / descriptionPrevious value: -"Path parameter: eventId"New value: +"Value for the 'eventId' path segment. Pass it under the name 'eventId', not as 'id'. Use the 'id' field of the event object as returned by Microsoft Graph."
- Changed
unmerge-excel-range4 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Path parameter: address"New value: +"Value for the 'address' path segment." - changed
Input schema / properties / driveId / descriptionPrevious value: -"Path parameter: driveId"New value: +"Value for the 'driveId' path segment. Pass it under the name 'driveId', not as 'id'. Use the 'id' field of the drive object as returned by Microsoft Graph." - changed
Input schema / properties / driveItemId / descriptionPrevious value: -"Path parameter: driveItemId"New value: +"Value for the 'driveItemId' path segment. Pass it under the name 'driveItemId', not as 'id'. Use the 'id' field of the drive item object as returned by Microsoft Graph." - changed
Input schema / properties / workbookWorksheetId / descriptionPrevious value: -"Path parameter: workbookWorksheetId"New value: +"Value for the 'workbookWorksheetId' path segment. Pass it under the name 'workbookWorksheetId', not as 'id'. Use the 'id' field of the workbook worksheet object as returned by Microsoft Graph."
- Added
update-calendar - Added
update-calendar-event - Added
update-contact-folder - Added
update-excel-range - Added
update-excel-table-row - Added
update-focused-inbox-override - Added
update-mail-folder - Changed
update-mail-message15 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "emailAddress": { + "additionalProperties": true, + "properties": { + "address": { + "description": "The email address of the person or entity.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The display name of the person or entity.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "type": "object" + } +} - changed
Input schema / properties / body / properties / bccRecipients / items / $refPrevious value: -"#/properties/body/properties/from"New value: +"#/$defs/def1" - changed
Input schema / properties / body / properties / ccRecipients / items / $refPrevious value: -"#/properties/body/properties/from"New value: +"#/$defs/def1" - added
Input schema / properties / body / properties / flag / properties / completedDateTime / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / propertiesRemoved value: -{ - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / flag / properties / completedDateTime / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / flag / properties / dueDateTime / $refPrevious value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / flag / properties / startDateTime / $refPrevious value: -"#/properties/body/properties/flag/properties/completedDateTime"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / from / $refAdded value: +"#/$defs/def1" - removed
Input schema / properties / body / properties / from / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / from / propertiesRemoved value: -{ - "emailAddress": { - "additionalProperties": true, - "properties": { - "address": { - "description": "The email address of the person or entity.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "The display name of the person or entity.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - } -} - removed
Input schema / properties / body / properties / from / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / toRecipients / items / $refPrevious value: -"#/properties/body/properties/from"New value: +"#/$defs/def1" - changed
Input schema / properties / messageId / descriptionPrevious value: -"Path parameter: messageId"New value: +"Value for the 'messageId' path segment. Pass it under the name 'messageId', not as 'id'. Use the 'id' field of the message object as returned by Microsoft Graph."
- Added
update-mail-rule - Added
update-mailbox-settings - Added
update-my-calendar-permission - Added
update-outlook-contact - Changed
update-planner-bucket11 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def1" + }, + "device": { + "$ref": "#/$defs/def1" + }, + "user": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "enum": [ + "automatic", + "noPreview", + "checklist", + "description", + "reference" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / tasks / items / properties / completedBy / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / propertiesRemoved value: -{ - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/tasks/items/properties/completedBy/properties/application" - } -} - removed
Input schema / properties / body / properties / tasks / items / properties / completedBy / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / tasks / items / properties / createdBy / $refPrevious value: -"#/properties/body/properties/tasks/items/properties/completedBy"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / enumRemoved value: -[ - "automatic", - "noPreview", - "checklist", - "description", - "reference" -] - removed
Input schema / properties / body / properties / tasks / items / properties / details / properties / previewType / typeRemoved value: -"string" - changed
Input schema / properties / body / properties / tasks / items / properties / previewType / $refPrevious value: -"#/properties/body/properties/tasks/items/properties/details/properties/previewType"New value: +"#/$defs/def2" - changed
Input schema / properties / plannerBucketId / descriptionPrevious value: -"Path parameter: plannerBucketId"New value: +"Value for the 'plannerBucketId' path segment. Pass it under the name 'plannerBucketId', not as 'id'. Use the 'id' field of the planner bucket object as returned by Microsoft Graph."
- Changed
update-planner-task11 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "application": { + "$ref": "#/$defs/def1" + }, + "device": { + "$ref": "#/$defs/def1" + }, + "user": { + "$ref": "#/$defs/def1" + } + }, + "type": "object" + }, + "def1": { + "additionalProperties": true, + "properties": { + "displayName": { + "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def2": { + "enum": [ + "automatic", + "noPreview", + "checklist", + "description", + "reference" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / completedBy / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / completedBy / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / completedBy / propertiesRemoved value: -{ - "application": { - "additionalProperties": true, - "properties": { - "displayName": { - "description": "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Unique identifier for the identity or actor. For example, in the access reviews decisions API, this property might record the id of the principal, that is, the group, user, or application that's subject to review.", - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "device": { - "$ref": "#/properties/body/properties/completedBy/properties/application" - }, - "user": { - "$ref": "#/properties/body/properties/completedBy/properties/application" - } -} - removed
Input schema / properties / body / properties / completedBy / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / createdBy / $refPrevious value: -"#/properties/body/properties/completedBy"New value: +"#/$defs/def0" - added
Input schema / properties / body / properties / details / properties / previewType / $refAdded value: +"#/$defs/def2" - removed
Input schema / properties / body / properties / details / properties / previewType / enumRemoved value: -[ - "automatic", - "noPreview", - "checklist", - "description", - "reference" -] - removed
Input schema / properties / body / properties / details / properties / previewType / typeRemoved value: -"string" - changed
Input schema / properties / body / properties / previewType / $refPrevious value: -"#/properties/body/properties/details/properties/previewType"New value: +"#/$defs/def2" - changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Changed
update-planner-task-details1 field changed- changed
Input schema / properties / plannerTaskId / descriptionPrevious value: -"Path parameter: plannerTaskId"New value: +"Value for the 'plannerTaskId' path segment. Pass it under the name 'plannerTaskId', not as 'id'. Use the 'id' field of the planner task object as returned by Microsoft Graph."
- Added
update-specific-calendar-event - Changed
update-subscription1 field changed- changed
Input schema / properties / subscriptionId / descriptionPrevious value: -"Path parameter: subscriptionId"New value: +"Value for the 'subscriptionId' path segment. Pass it under the name 'subscriptionId', not as 'id'. Use the 'id' field of the subscription object as returned by Microsoft Graph."
- Changed
update-todo-task12 fields changed- added
Input schema / $defsAdded value: +{ + "def0": { + "additionalProperties": true, + "properties": { + "dateTime": { + "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", + "type": "string" + }, + "timeZone": { + "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "def1": { + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + } +} - added
Input schema / properties / body / properties / completedDateTime / $refAdded value: +"#/$defs/def0" - removed
Input schema / properties / body / properties / completedDateTime / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / completedDateTime / propertiesRemoved value: -{ - "dateTime": { - "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).", - "type": "string" - }, - "timeZone": { - "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / completedDateTime / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / dueDateTime / $refPrevious value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / daysOfWeek / items / anyOfPrevious value: -[ - { - "enum": [ - "sunday", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday" - ], - "type": "string" - }, - { - "additionalProperties": true, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/def1" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / body / properties / recurrence / properties / pattern / properties / firstDayOfWeek / $refPrevious value: -"#/properties/body/properties/recurrence/properties/pattern/properties/daysOfWeek/items/anyOf/0"New value: +"#/$defs/def1" - changed
Input schema / properties / body / properties / reminderDateTime / $refPrevious value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / body / properties / startDateTime / $refPrevious value: -"#/properties/body/properties/completedDateTime"New value: +"#/$defs/def0" - changed
Input schema / properties / todoTaskId / descriptionPrevious value: -"Path parameter: todoTaskId"New value: +"Value for the 'todoTaskId' path segment. Pass it under the name 'todoTaskId', not as 'id'. Use the 'id' field of the todo task object as returned by Microsoft Graph." - changed
Input schema / properties / todoTaskListId / descriptionPrevious value: -"Path parameter: todoTaskListId"New value: +"Value for the 'todoTaskListId' path segment. Pass it under the name 'todoTaskListId', not as 'id'. Use the 'id' field of the todo task list object as returned by Microsoft Graph."
- Removed
update-todo-task-list - Added
upload-file-content - Added
verify-login
22 tool updates
v0.131.2- Added
create-draft-email - Added
create-excel-table - Added
create-focused-inbox-override - Removed
create-onenote-section - Added
delete-contact-folder - Removed
delete-my-calendar-permission - Removed
dismiss-calendar-event-reminder - Removed
download-bytes - Added
format-excel-range - Removed
forward-calendar-event - Added
get-mail-message - Added
get-onenote-page-content - Removed
list-accounts - Added
list-all-onenote-sections - Added
list-excel-tables - Added
list-excel-worksheets - Added
list-mail-messages - Added
search-onedrive-files - Added
select-account - Added
tentatively-accept-calendar-event - Added
unmerge-excel-range - Removed
update-my-calendar-permission
179 tool updates
v0.131.2- Removed
accept-calendar-event - Removed
add-excel-table-rows - Changed
add-mail-attachment1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
cancel-calendar-event - Removed
clear-excel-range - Removed
copy-drive-item - Changed
copy-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
create-calendar - Removed
create-calendar-event - Removed
create-contact-child-folder - Removed
create-contact-folder - Removed
create-contact-in-folder - Removed
create-draft-email - Removed
create-drive-item-preview - Removed
create-drive-item-share-link - Removed
create-excel-chart - Removed
create-excel-table - Removed
create-focused-inbox-override - Changed
create-forward-draft1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-mail-attachment-upload-session1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
create-mail-child-folder - Removed
create-mail-folder - Removed
create-mail-rule - Removed
create-my-calendar-permission - Removed
create-onedrive-folder - Changed
create-onenote-notebook10 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - removed
Input schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / $refRemoved value: -"#/properties/body" - added
Input schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / propertiesAdded value: +{ + "createdBy": { + "$ref": "#/properties/body/properties/createdBy" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default notebook. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "isShared": { + "description": "Indicates whether the notebook is shared. If true, the contents of the notebook can be seen by people other than the owner. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/properties/body/properties/createdBy" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "$ref": "#/properties/body/properties/links" + }, + "sectionGroups": { + "description": "The section groups in the notebook. Read-only. Nullable.", + "items": { + "$ref": "#/properties/body/properties/sectionGroups/items" + }, + "type": "array" + }, + "sectionGroupsUrl": { + "description": "The URL for the sectionGroups navigation property, which returns all the section groups in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "The sections in the notebook. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "createdBy": { + "$ref": "#/properties/body/properties/createdBy" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default section. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/properties/body/properties/createdBy" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" + }, + "oneNoteWebUrl": { + "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" + } + }, + "type": "object" + }, + "pages": { + "description": "The collection of pages in the section. Read-only. Nullable.", + "items": { + "additionalProperties": true, + "properties": { + "content": { + "description": "The page's HTML content.", + "type": [ + "string", + "null" + ] + }, + "contentUrl": { + "description": "The URL for the page's HTML content. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdByAppId": { + "description": "The unique identifier of the application that created the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "level": { + "anyOf": [ + { + "description": "The indentation level of the page. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The indentation level of the page. Read-only." + }, + "links": { + "additionalProperties": true, + "properties": { + "oneNoteClientUrl": { + "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" + }, + "oneNoteWebUrl": { + "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" + } + }, + "type": "object" + }, + "order": { + "anyOf": [ + { + "description": "The order of the page within its parent section. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The order of the page within its parent section. Read-only." + }, + "parentNotebook": { + "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook" + }, + "parentSection": { + "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "The title of the page.", + "type": [ + "string", + "null" + ] + }, + "userTags": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "pagesUrl": { + "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", + "type": [ + "string", + "null" + ] + }, + "parentNotebook": { + "$ref": "#/properties/body/properties/sectionGroups/items/properties/parentNotebook" + }, + "parentSectionGroup": { + "$ref": "#/properties/body/properties/sectionGroups/items" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "sectionsUrl": { + "description": "The URL for the sections navigation property, which returns all the sections in the notebook. Read-only.", + "type": [ + "string", + "null" + ] + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "userRole": { + "$ref": "#/properties/body/properties/userRole" + } +} - added
Input schema / properties / body / properties / sectionGroups / items / properties / parentNotebook / typeAdded value: +"object" - added
Input schema / properties / body / properties / sectionGroups / items / properties / sections / items / $refAdded value: +"#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items" - removed
Input schema / properties / body / properties / sectionGroups / items / properties / sections / items / additionalPropertiesRemoved value: -true - removed
Input schema / properties / body / properties / sectionGroups / items / properties / sections / items / propertiesRemoved value: -{ - "createdBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "displayName": { - "description": "The name of the notebook.", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "isDefault": { - "description": "Indicates whether this is the user's default section. Read-only.", - "type": [ - "boolean", - "null" - ] - }, - "lastModifiedBy": { - "$ref": "#/properties/body/properties/createdBy" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "pages": { - "description": "The collection of pages in the section. Read-only. Nullable.", - "items": { - "additionalProperties": true, - "properties": { - "content": { - "description": "The page's HTML content.", - "type": [ - "string", - "null" - ] - }, - "contentUrl": { - "description": "The URL for the page's HTML content. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdByAppId": { - "description": "The unique identifier of the application that created the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "createdDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "id": { - "description": "The unique identifier for an entity. Read-only.", - "type": "string" - }, - "lastModifiedDateTime": { - "anyOf": [ - { - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", - "format": "date-time", - "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." - }, - "level": { - "anyOf": [ - { - "description": "The indentation level of the page. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The indentation level of the page. Read-only." - }, - "links": { - "additionalProperties": true, - "properties": { - "oneNoteClientUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - }, - "oneNoteWebUrl": { - "$ref": "#/properties/body/properties/links/properties/oneNoteClientUrl" - } - }, - "type": "object" - }, - "order": { - "anyOf": [ - { - "description": "The order of the page within its parent section. Read-only.", - "maximum": 2147483647, - "minimum": -2147483648, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "The order of the page within its parent section. Read-only." - }, - "parentNotebook": { - "$ref": "#/properties/body" - }, - "parentSection": { - "$ref": "#/properties/body/properties/sectionGroups/items/properties/sections/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - }, - "title": { - "description": "The title of the page.", - "type": [ - "string", - "null" - ] - }, - "userTags": { - "items": { - "type": [ - "string", - "null" - ] - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - }, - "pagesUrl": { - "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", - "type": [ - "string", - "null" - ] - }, - "parentNotebook": { - "$ref": "#/properties/body" - }, - "parentSectionGroup": { - "$ref": "#/properties/body/properties/sectionGroups/items" - }, - "self": { - "description": "The endpoint where you can get details about the page. Read-only.", - "type": [ - "string", - "null" - ] - } -} - removed
Input schema / properties / body / properties / sectionGroups / items / properties / sections / items / typeRemoved value: -"object" - changed
Input schema / properties / body / properties / sections / items / $refPrevious value: -"#/properties/body/properties/sectionGroups/items/properties/sections/items"New value: +"#/properties/body/properties/sectionGroups/items/properties/parentNotebook/properties/sections/items"
- Changed
create-onenote-page5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - removed
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / $refRemoved value: -"#/properties/body" - added
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / propertiesAdded value: +{ + "content": { + "description": "The page's HTML content.", + "type": [ + "string", + "null" + ] + }, + "contentUrl": { + "description": "The URL for the page's HTML content. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdByAppId": { + "description": "The unique identifier of the application that created the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "level": { + "anyOf": [ + { + "description": "The indentation level of the page. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The indentation level of the page. Read-only." + }, + "links": { + "$ref": "#/properties/body/properties/links" + }, + "order": { + "anyOf": [ + { + "description": "The order of the page within its parent section. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The order of the page within its parent section. Read-only." + }, + "parentNotebook": { + "$ref": "#/properties/body/properties/parentNotebook" + }, + "parentSection": { + "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "The title of the page.", + "type": [ + "string", + "null" + ] + }, + "userTags": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / typeAdded value: +"object"
- Changed
create-onenote-section7 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - removed
Input schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / $refRemoved value: -"#/properties/body" - added
Input schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / propertiesAdded value: +{ + "createdBy": { + "$ref": "#/properties/body/properties/createdBy" + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "displayName": { + "description": "The name of the notebook.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "isDefault": { + "description": "Indicates whether this is the user's default section. Read-only.", + "type": [ + "boolean", + "null" + ] + }, + "lastModifiedBy": { + "$ref": "#/properties/body/properties/createdBy" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the notebook was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "links": { + "$ref": "#/properties/body/properties/links" + }, + "pages": { + "description": "The collection of pages in the section. Read-only. Nullable.", + "items": { + "$ref": "#/properties/body/properties/pages/items" + }, + "type": "array" + }, + "pagesUrl": { + "description": "The pages endpoint where you can get details for all the pages in the section. Read-only.", + "type": [ + "string", + "null" + ] + }, + "parentNotebook": { + "$ref": "#/properties/body/properties/pages/items/properties/parentNotebook" + }, + "parentSectionGroup": { + "$ref": "#/properties/body/properties/pages/items/properties/parentNotebook/properties/sectionGroups/items" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + } +} - added
Input schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / typeAdded value: +"object" - changed
Input schema / properties / body / properties / pages / items / properties / parentNotebook / properties / sections / items / $refPrevious value: -"#/properties/body"New value: +"#/properties/body/properties/pages/items/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" - changed
Input schema / properties / body / properties / pages / items / properties / parentSection / $refPrevious value: -"#/properties/body"New value: +"#/properties/body/properties/pages/items/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items"
- Changed
create-onenote-section-page5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - removed
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / $refRemoved value: -"#/properties/body" - added
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / additionalPropertiesAdded value: +true - added
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / propertiesAdded value: +{ + "content": { + "description": "The page's HTML content.", + "type": [ + "string", + "null" + ] + }, + "contentUrl": { + "description": "The URL for the page's HTML content. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdByAppId": { + "description": "The unique identifier of the application that created the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "createdDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was created. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "id": { + "description": "The unique identifier for an entity. Read-only.", + "type": "string" + }, + "lastModifiedDateTime": { + "anyOf": [ + { + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only.", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The date and time when the page was last modified. The timestamp represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only." + }, + "level": { + "anyOf": [ + { + "description": "The indentation level of the page. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The indentation level of the page. Read-only." + }, + "links": { + "$ref": "#/properties/body/properties/links" + }, + "order": { + "anyOf": [ + { + "description": "The order of the page within its parent section. Read-only.", + "maximum": 2147483647, + "minimum": -2147483648, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The order of the page within its parent section. Read-only." + }, + "parentNotebook": { + "$ref": "#/properties/body/properties/parentNotebook" + }, + "parentSection": { + "$ref": "#/properties/body/properties/parentNotebook/properties/sectionGroups/items/properties/sections/items" + }, + "self": { + "description": "The endpoint where you can get details about the page. Read-only.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "The title of the page.", + "type": [ + "string", + "null" + ] + }, + "userTags": { + "items": { + "type": [ + "string", + "null" + ] + }, + "type": "array" + } +} - added
Input schema / properties / body / properties / parentNotebook / properties / sectionGroups / items / properties / sections / items / properties / pages / items / typeAdded value: +"object"
- Changed
create-outlook-category1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
create-outlook-contact - Changed
create-planner-bucket1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-planner-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-planner-task-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-reply-all-draft1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-reply-draft1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
create-specific-calendar-event - Changed
create-subscription1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-todo-linked-resource1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-todo-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create-todo-task-list1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
create-upload-session - Removed
decline-calendar-event - Removed
delete-calendar - Removed
delete-calendar-event - Removed
delete-contact-folder - Removed
delete-drive-item-permission - Removed
delete-excel-range - Removed
delete-excel-table-row - Removed
delete-focused-inbox-override - Changed
delete-mail-attachment1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
delete-mail-folder - Changed
delete-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
delete-mail-rule - Changed
delete-my-calendar-permission1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
delete-onedrive-file - Changed
delete-onenote-page1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
delete-outlook-contact - Changed
delete-planner-bucket1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
delete-planner-task-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
delete-specific-calendar-event - Changed
delete-subscription1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
delete-todo-linked-resource1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
delete-todo-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
delete-todo-task-list1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
dismiss-calendar-event-reminder1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
format-excel-range - Changed
forward-calendar-event1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
forward-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
get-calendar-event - Removed
get-calendar-view - Removed
get-current-user - Removed
get-drive-delta - Removed
get-drive-item - Removed
get-drive-root-item - Changed
get-excel-range1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
get-excel-table - Removed
get-excel-used-range - Removed
get-mail-message - Changed
get-mail-message-mime1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
get-mail-tips - Removed
get-mailbox-settings - Changed
get-my-profile1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
get-onenote-page-content - Removed
get-outlook-contact - Changed
get-planner-bucket1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get-planner-plan1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get-planner-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get-planner-task-details1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
get-specific-calendar-event - Removed
get-specific-calendar-view - Changed
get-subscription1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get-todo-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
graph-batch - Removed
insert-excel-range - Removed
list-all-onenote-sections - Removed
list-calendar-event-instances - Removed
list-calendar-events - Removed
list-calendar-events-delta - Removed
list-calendar-view-delta - Removed
list-calendars - Removed
list-contact-folder-child-folders - Removed
list-contact-folder-contacts - Removed
list-contact-folders - Removed
list-drive-item-permissions - Removed
list-drive-item-thumbnails - Removed
list-drive-item-versions - Removed
list-drives - Removed
list-excel-table-rows - Removed
list-excel-tables - Removed
list-excel-worksheets - Removed
list-focused-inbox-overrides - Removed
list-folder-files - Changed
list-mail-attachments1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
list-mail-child-folders - Removed
list-mail-folder-messages - Removed
list-mail-folder-messages-delta - Removed
list-mail-folders - Removed
list-mail-messages - Removed
list-mail-rules - Removed
list-my-calendar-permissions - Changed
list-onenote-notebook-sections1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-onenote-notebooks1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-onenote-pages1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-onenote-section-groups1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-onenote-section-pages1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-outlook-categories1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
list-outlook-contacts - Changed
list-plan-buckets1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-plan-tasks1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-planner-task-messages1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-planner-tasks1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
list-specific-calendar-events - Changed
list-subscriptions1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-supported-languages1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-supported-time-zones1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-todo-linked-resources1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-todo-task-lists1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list-todo-tasks1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
login - Removed
logout - Removed
merge-excel-range - Changed
move-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
move-rename-onedrive-item - Changed
reauthorize-subscription1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
remove-account - Changed
reply-all-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
reply-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
search-onedrive-files - Removed
select-account - Changed
send-draft-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
send-mail1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
share-drive-item - Removed
snooze-calendar-event-reminder - Removed
sort-excel-range - Removed
tentatively-accept-calendar-event - Removed
unmerge-excel-range - Removed
update-calendar - Removed
update-calendar-event - Removed
update-contact-folder - Removed
update-excel-range - Removed
update-excel-table-row - Removed
update-focused-inbox-override - Removed
update-mail-folder - Changed
update-mail-message1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
update-mail-rule - Removed
update-mailbox-settings - Changed
update-my-calendar-permission1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
update-outlook-contact - Changed
update-planner-bucket1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
update-planner-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
update-planner-task-details1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
update-specific-calendar-event - Changed
update-subscription1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
update-todo-task1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
update-todo-task-list1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
upload-file-content - Changed
upload-my-profile-photo1 field changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true
- Removed
verify-login
105 tool updates
v0.131.1- Changed
accept-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
add-excel-table-rows1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
add-mail-attachment1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
cancel-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
clear-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
copy-drive-item1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
copy-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-calendar1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-contact-child-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-contact-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-contact-in-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-draft-email1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-drive-item-preview1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-drive-item-share-link1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-excel-chart1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-excel-table1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-focused-inbox-override1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-forward-draft1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-mail-attachment-upload-session1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-mail-child-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-mail-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-mail-rule1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-my-calendar-permission1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-onedrive-folder4 fields changed- changed
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / descriptionPrevious value: -"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."New value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - changed
Input schema / properties / body / properties / createdByUser / properties / businessPhones / descriptionPrevious value: -"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith)."New value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - changed
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / descriptionPrevious value: -"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby."New value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-onenote-notebook1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-onenote-page1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-onenote-section1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-onenote-section-page1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-outlook-category1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-outlook-contact1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-planner-bucket1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-planner-task1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-planner-task-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-reply-all-draft1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-reply-draft1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-specific-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-subscription1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-todo-linked-resource1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-todo-task1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-todo-task-list1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
create-upload-session1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
decline-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-calendar1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-contact-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-drive-item-permission1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-excel-table-row1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-focused-inbox-override1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-mail-attachment1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-mail-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-mail-rule1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-my-calendar-permission1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-onedrive-file1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-onenote-page1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-outlook-contact1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-planner-bucket1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-planner-task-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-specific-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-subscription1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-todo-linked-resource1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-todo-task1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
delete-todo-task-list1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
dismiss-calendar-event-reminder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
format-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
forward-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
forward-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
graph-batch1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
insert-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
merge-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
move-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
move-rename-onedrive-item4 fields changed- changed
Input schema / properties / body / properties / createdByUser / properties / accountEnabled / descriptionPrevious value: -"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in)."New value: +"true if the account is enabled; otherwise, false. This property is required when a user is created. Requires $select to retrieve. Supports $filter (eq, ne, not, and in). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - changed
Input schema / properties / body / properties / createdByUser / properties / businessPhones / descriptionPrevious value: -"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith)."New value: +"The telephone numbers for the user. NOTE: Although it's a string collection, only one number can be set for this property. Read-only for users synced from the on-premises directory. Returned by default. Supports $filter (eq, not, ge, le, startsWith). This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - changed
Input schema / properties / body / properties / createdByUser / properties / userPrincipalName / descriptionPrevious value: -"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby."New value: +"The user principal name (UPN) of the user. The UPN is an Internet-style sign-in name for the user based on the Internet standard RFC 822. By convention, this value should map to the user's email name. The general format is alias@domain, where the domain must be present in the tenant's collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization.NOTE: This property can't contain accent characters. Only the following characters are allowed A - Z, a - z, 0 - 9, ' . - _ ! # ^ ~. For the complete list of allowed characters, see username policies. Returned by default. Supports $filter (eq, ne, not, ge, le, in, startsWith, endsWith) and $orderby. This property is subject to sensitive action restrictions; only specific privileged administrator roles can update it." - added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
reauthorize-subscription1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
reply-all-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
reply-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
send-draft-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
send-mail1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
share-drive-item1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
snooze-calendar-event-reminder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
sort-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
tentatively-accept-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
unmerge-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-calendar1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-contact-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-excel-range1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-excel-table-row1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-focused-inbox-override1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-mail-folder1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-mail-message1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-mail-rule1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-mailbox-settings1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-my-calendar-permission1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-outlook-contact1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-planner-bucket1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-planner-task1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-planner-task-details1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-specific-calendar-event1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-subscription1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-todo-task1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
update-todo-task-list1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
upload-file-content1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
- Changed
upload-my-profile-photo1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "For destructive operations when the confirm gate is enabled (MS365_MCP_REQUIRE_CONFIRM=true; off by default). Set to true only after the user has explicitly approved this action. When the gate is on, calls without confirm: true return { error: \"confirmation_required\" } without touching user data.", + "type": "boolean" +}
TDQS
Scored across 188 tools
Numerous tools have near-identical names and overlapping purposes — e.g., list-mail-messages vs list-mail-folder-messages, list-calendar-events vs get-calendar-view vs list-specific-calendar-events, and the default/specific event CRUD pairs. While descriptions add nuance, an agent selecting among 188 similarly named list/get/create/update/delete tools will frequently misselect. Several download variants and Excel format tools further blur boundaries.
The dominant pattern is list/get/create/update/delete + resource in lowercase-hyphen form, which is predictable across mail, calendar, files, and Excel. However, consistency breaks with auth tools (login, logout), graph-batch, and mixed resource terms like list-plan-buckets vs list-planner-tasks and create-draft-email vs send-draft-message. Overall it's mostly consistent but not uniform.
188 tools is far beyond the 3-15 well-scoped range and even the 25+ 'too many' threshold, making the set overwhelming for an agent. The breadth of Microsoft 365 domains explains some of the size, but many variants (specific vs default calendar, folder-scoped vs global mail lists) inflate the count without adding conceptual distinctness.
The server covers CRUD across mail, calendar, contacts, OneDrive, Excel, OneNote, Planner, and To Do, so the main domains are represented. However, tips repeatedly reference list-users and get-schedule, which are not exposed, and there is no way to enumerate Planner plans or delete Excel tables/OneNote notebooks. These missing tools create dead ends for common workflows.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that provides AI assistants with access to Microsoft Teams, enabling interaction with teams, channels, chats, and organizational data through Microsoft Graph APIs.19604 npm138MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive server that enables AI applications to interact with Microsoft 365 and Azure AD services through standardized Model Context Protocol interfaces.3MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that connects AI assistants to SharePoint via Microsoft Graph API, enabling natural language queries for documents, lists, and site management.88-
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol servers for Microsoft 365, enabling AI assistants to interact with Calendar, Contacts, OneDrive, Outlook, and SharePoint via the Microsoft Graph API.MIT