outlook-mcp
Click on "Install 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., "@outlook-mcpShow me my unread emails from today"
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.
outlook-mcp
MCP server for Microsoft Outlook personal accounts via Microsoft Graph API.
Personal Microsoft accounts only —
@outlook.com,@hotmail.com,@live.com. Work/school accounts (Entra ID) are not supported in v1.
Disclaimer: Independent open-source project. Not affiliated with, endorsed by, or supported by Microsoft Corporation. "Outlook" and "Microsoft Graph" are trademarks of Microsoft.
Who this is for
You'll like this if you're:
An agent builder wiring Outlook into your own infra (OpenClaw, Claude Code, Cursor, custom MCP host) and want a typed tool surface — not stdout you have to parse
Building on personal Microsoft accounts (Outlook.com / Hotmail / Live) and want full control: BYO Azure app, no enterprise consent flow, no shared client ID
Looking for real coverage — mail, calendar, contacts, to-do, drafts, folders, batch ops, threading — instead of a mail-only or calendar-only wrapper
Security-conscious: tokens in the OS keyring (Keychain on macOS), granular
allow_categories, optionalread_onlymode, zero telemetry
This isn't for you if you need work/school M365 accounts (use Microsoft's official tooling — Entra ID auth and admin-consent flows are out of scope here), or if a basic mail-only client would suffice (this has 62 tools — way more than you need for "read my inbox").
How it differs from other Outlook tools you'll find
This is the only first-class MCP server in the personal-Outlook space — most alternatives are bash scripts or skill-shaped CLI wrappers the agent shells out to. That distinction matters: the agent gets typed tool schemas with structured args/returns, not stdout it has to parse. Other things you won't find elsewhere: /$batch-optimized triage (10-20× faster on bulk ops), recursive folder ops with name resolution, granular per-category permissions, multi-account support, and full attachment write paths including >3MB upload sessions for drafts.
Related MCP server: mega-outlook-mcp
What This Enables
Give your AI agent full Outlook access. Example prompts that just work:
"Summarize my unread email from the past 24 hours and flag anything time-sensitive."
"What's in my Focused Inbox right now? Anything in Other that looks like it belongs up top?"
"Any shipping updates in my inbox? Track what I'm waiting on and when it's supposed to arrive."
"Scan my email for upcoming subscription renewals — what's about to auto-charge in the next two weeks?"
"I've got a trip to Seattle next week — check my calendar for the itinerary and create a To Do task with a packing checklist."
"Draft a reply to the last message from my sister saying I'll call her this weekend."
"Move all newsletter and promotional email from this week to a 'Read Later' folder — batch 20 at a time."
The server exposes 62 discrete tools so the agent can compose its own workflow — read, triage, write, schedule, track tasks — without hardcoded macros.
Works With
Claude Code — add to
~/.claude/settings.jsonundermcpServersCursor — MCP-compatible
Any MCP client — it's a standard stdio MCP server
Listed on the official MCP Registry as io.github.mpalermiti/outlook-mcp.
Features
62 tools across 13 categories:
Auth (1) -- auth status check (login is via CLI)
Mail Read (7) -- list inbox (with Focused Inbox filter), read message, bulk read by ID via
$batch, search (KQL), list folders, delta-sync inbox changes, composed "since last call" digest across mail/events/contactsMail Write (3) -- send, reply/reply-all, forward
Mail Triage (9) -- move, delete (soft by default), flag, categorize, mark read/unread, reclassify (Focused Inbox), list/set/delete per-sender Focused Inbox overrides
Calendar Read (3) -- list events (with recurring expansion), get event details, delta-sync event changes
Calendar Write (4) -- create, update, delete, RSVP (accept/decline/tentative)
Contacts (7) -- list, search, get, create, update, delete, delta-sync changes
To Do (6) -- list task lists, list/create/update/complete/delete tasks
Drafts (5) -- list, create, update, send, delete
Attachments (5) -- list, download, send-with-attachments, attach-to-draft, remove-draft-attachment
Folder Management (3) -- create, rename, delete mail folders
Threading and Batch (3) -- list thread, copy message, batch triage
User and Admin (6) -- whoami, list calendars, list categories, mail tips, accounts
Design principles:
BYOID -- Bring Your Own ID. You register your own Azure AD app. No shared client ID.
Zero telemetry -- no analytics, no local caching, no third-party calls.
Token storage -- OS keyring via
azure-identity(macOS Keychain, Windows Credential Store, Linux Secret Service).Input validation -- all inputs validated (email, Graph IDs, OData, KQL, datetimes) before any API call.
Read-only mode -- set
read_only: truein config to block all write operations.Soft delete -- delete moves to Deleted Items by default. Hard delete requires explicit
permanent: true.Timezone-aware -- calendar operations respect your configured IANA timezone.
Agent-friendly shape (1.8.0)
Two pure-code upgrades that make the same 57 tools cheaper and more recoverable for AI agents:
Concise mode — pass
concise=Trueto the five high-volume read tools (outlook_list_inbox,outlook_read_message,outlook_search_mail,outlook_list_events,outlook_list_thread) to drop bulky fields: full message bodies, per-event attendee lists, quoted prior-message text in threads, body previews/categories on inbox listings. Typical payload reduction ~10×. Defaultconcise=Falsepreserves the existing response shape — strict backward compat.Structured Graph errors — every tool wraps msgraph SDK exceptions into
{code, message, action}responses with operator-friendly recovery hints: re-auth on 401, ROADMAP pointer on 403/ErrorAccessDenied(known unsupported-endpoint dead-ends), re-list on 404/ErrorItemNotFound, back-off on 429, retry on 503.OutlookMCPErrorsubclasses and validation errors pass through unchanged.
Azure AD App Registration
You need to register a free Azure AD app to get a client ID.
Prerequisites (Personal Microsoft Accounts)
Microsoft has deprecated app registration for personal accounts without an Azure AD tenant. You need to create a free Azure account first:
Go to azure.microsoft.com/free and sign up with your personal
@outlook.comaccount. Requires a credit card for identity verification but won't charge you. This creates a proper Azure AD tenant.
Register the App
Go to App Registrations and sign in with your
@outlook.comaccount.Click "+ New registration" and fill in:
Name: anything except Microsoft-branded terms (e.g.
mp-outlook-mcp— names like "Outlook MCP" will be rejected)Supported account types: select "Personal Microsoft accounts only"
Redirect URI: leave blank
Click Register. Copy the Application (client) ID from the overview page.
Go to Authentication (Preview) → Settings tab → toggle "Allow public client flows" to Yes → Save.
Go to API permissions → Add a permission → Microsoft Graph → Delegated permissions → add:
Mail.ReadWrite,Mail.SendCalendars.ReadWriteContacts.ReadWrite,Tasks.ReadWriteUser.Read,offline_access
No client secret is needed. The device code flow uses public client auth.
Quick Start
Install
Option A — from PyPI (recommended):
uv tool install outlook-graph-mcp
# or: pipx install outlook-graph-mcp
# or: pip install outlook-graph-mcpOption B — from source:
git clone https://github.com/mpalermiti/outlook-mcp.git
cd outlook-mcp
uv syncConfigure
Create ~/.outlook-mcp/config.json:
{
"client_id": "YOUR_APPLICATION_CLIENT_ID",
"tenant_id": "consumers",
"timezone": "America/Los_Angeles",
"read_only": true
}The only required field is client_id. Everything else has sensible defaults. Start with read_only: true — flip to false when you're comfortable.
Register with your MCP client
If installed from PyPI:
{
"mcpServers": {
"outlook": {
"command": "outlook-mcp"
}
}
}If installed from source:
{
"mcpServers": {
"outlook": {
"command": "uv",
"args": ["--directory", "/path/to/outlook-mcp", "run", "outlook-mcp"]
}
}
}For OpenClaw, use the openclaw mcp CLI — it writes to mcp.servers in ~/.openclaw/openclaw.json for you:
# If installed from PyPI:
openclaw mcp set outlook '{"command":"outlook-mcp"}'
# If installed from source:
openclaw mcp set outlook '{"command":"uv","args":["--directory","/path/to/outlook-mcp","run","outlook-mcp"]}'
# Verify:
openclaw mcp list
openclaw mcp show outlook --jsonRestart the OpenClaw gateway after registering. See the OpenClaw MCP docs for SSE/HTTP transport variants.
Authenticate
Run this once on the machine where the MCP server will run:
uv run outlook-mcp authYou'll get a URL and a code. Open the URL in any browser, enter the code, and sign in with your Microsoft account. Tokens are cached in the OS keyring — the MCP server picks them up automatically.
Other CLI commands:
uv run outlook-mcp status # Check auth status
uv run outlook-mcp logout # Clear credentials
uv run outlook-mcp serve # Start MCP server (default, used by OpenClaw/Claude)Troubleshooting
SSL: CERTIFICATE_VERIFY_FAILED on Linux
If auth fails with [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate, your Python environment can't find the system CA bundle. This is common on minimal/container Linux images and with the isolated venv from uv tool install.
Point Python at your system CA bundle. Set both variables — auth (via azure-identity → requests) reads REQUESTS_CA_BUNDLE, while the delta/$batch paths (via httpx) read SSL_CERT_FILE:
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt # httpx + Python ssl
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # azure-identity authThe path varies by distro: Debian/Ubuntu use /etc/ssl/certs/ca-certificates.crt; RHEL/Fedora use /etc/pki/tls/certs/ca-bundle.crt. If the file is missing, install your distro's CA package (ca-certificates). Set these in the same environment your MCP client launches the server from so they apply at runtime, not just to the one-time auth command.
Token cache stored unencrypted (Linux)
A one-time startup warning about the token cache falling back to plaintext means libsecret/PyGObject isn't importable — see Privacy and Security for the fix.
Tool Reference
Auth
Tool | Description |
| Check if authenticated and whether read-only mode is active. |
Note: Authentication is handled via the CLI (
outlook-mcp auth), not through MCP tools. See Authenticate above.
Mail Read
Tool | Description |
| List messages in a folder. |
| Get full message by ID. Format: |
| Bulk read up to 20 messages by ID via Graph |
| Search mail using KQL query. Optionally scope to a folder by name or ID. |
| List mail folders with counts, |
| List only inbox changes since the last call. First call returns a full snapshot plus a |
| One structured "since last call" digest composing mail/events/contacts deltas. Returns counts + |
Mail Write
Tool | Description |
| Send email. Supports TO/CC/BCC, HTML body, importance level. |
| Reply or reply-all to a message. |
| Forward a message to one or more recipients with optional comment. |
Mail Triage
Tool | Description |
| Move a message to a folder by name or ID. |
| Delete a message. Soft delete (Deleted Items) by default. |
| Set follow-up flag: |
| Set categories on a message. |
| Mark a message as read or unread. |
| Move a message between Focused Inbox and Other ( |
| List Focused Inbox per-sender override rules. |
| Upsert a per-sender Focused Inbox override ( |
| Delete a Focused Inbox override by ID. |
Calendar Read
Tool | Description |
| List events in a date range. Expands recurring events. Configurable via |
| Get full event details: attendees, body, online meeting URL, recurrence. |
| List only event changes inside a window since the last call. |
Calendar Write
Tool | Description |
| Create event with location, attendees, recurrence, online meeting support. |
| Update event fields (subject, time, location, body). Only patches changed fields. |
| Delete a calendar event. |
| RSVP to an event: |
Contacts
Tool | Description |
| List contacts with cursor pagination. |
| Search contacts by name or email. |
| Get full contact details by ID. |
| Create a new contact. |
| Update contact fields. |
| Delete a contact. |
| List only contact changes since the last call. Deletes come back as |
To Do
Tool | Description |
| List To Do lists. |
| List tasks with status filter and pagination. |
| Create task with due date, importance, recurrence. |
| Update task fields. |
| Mark task as completed. |
| Delete a task. |
Drafts
Tool | Description |
| List draft messages with pagination. |
| Create a draft. Supports scheduled delivery via |
| Update draft fields. Accepts |
| Send an existing draft. |
| Delete a draft. |
Attachments
Tool | Description |
| List attachments on a message. |
| Download attachment and save decoded bytes to a file. |
| Send message with file attachments (auto upload session for >3MB). |
| Add attachments to an existing draft (auto upload session for >3MB). |
| Remove a single attachment from a draft. |
Folder Management
Tool | Description |
| Create mail folder (top-level or nested). |
| Rename a mail folder. |
| Delete a mail folder (refuses well-known folders). |
Threading and Batch
Tool | Description |
| Get all messages in a conversation thread. |
| Copy a message to another folder. |
| Batch move/flag/categorize/mark_read (max 20 per call). Single Graph |
User and Admin
Tool | Description |
| Get current user profile. |
| List available calendars. |
| List category definitions with colors. |
| Pre-send check (OOF, delivery restrictions). |
| List configured accounts. |
| Switch active account. |
Configuration
Config lives at ~/.outlook-mcp/config.json (created with 0600 permissions).
Field | Type | Default | Description |
|
|
| Azure AD application (client) ID. Required for auth. |
|
|
| Azure AD tenant. Use |
|
|
| IANA timezone (e.g. |
|
|
| When |
|
|
| Optional. Restrict write tools to specific categories (see below). Empty list = all writes allowed when |
Toolset selection (optional) — OUTLOOK_MCP_TOOLSETS
All 62 tool schemas load into the client's context every turn (~8.6k tokens). A client that only needs part of the surface can set the OUTLOOK_MCP_TOOLSETS environment variable to a comma-separated list of tool groups, and only those load. The account group (auth / identity) is always available.
# e.g. a recurring mail + calendar agent: ~30 tools instead of 62 (~52% fewer tool tokens/turn)
OUTLOOK_MCP_TOOLSETS="mail,calendar,digest,delta"Groups: mail, drafts, attachments, calendar, contacts, todo, folders, digest, delta, admin. Unset (the default) loads everything — fully backward compatible. This only affects which tools are advertised; enabled tools behave identically.
Granular Write Permissions (optional)
By default, read_only: false unlocks all write tools. For finer control, set allow_categories to restrict write access to specific categories. Read tools (list, search, get) are always allowed — allow_categories only narrows the write surface.
Available categories:
Category | Tools | Risk |
| create/update/delete draft | Safe — drafts only, no send |
| move, delete (soft), flag, categorize, mark read, copy, batch | Moderate — reversible except hard delete |
| create/rename/delete folder | Moderate |
| send, reply, forward, send_draft, send_with_attachments | Dangerous — sends email on your behalf |
| create/update/delete event, RSVP | Moderate — creates calendar entries |
| create/update/delete contact | Moderate |
| create/update/complete/delete task | Safe — your own task list |
Example policies:
Draft-only assistant (agent can compose drafts, you review and send):
{ "read_only": false, "allow_categories": ["mail_drafts", "mail_triage", "todo_write"] }Calendar-only (agent can manage your schedule, nothing else):
{ "read_only": false, "allow_categories": ["calendar_write"] }Full write access (agent can do everything):
{ "read_only": false }Read-only (safest default, no writes):
{ "read_only": true }When allow_categories is set, any tool in a non-allowed category returns a permission-denied error (PermissionDeniedError) naming the blocked category. When allow_categories is empty (or unset) and read_only is false, all write tools are permitted. read_only: true always takes precedence — if set, all writes are blocked regardless of allow_categories. Unknown category names are rejected at config load time with a validation error; only the seven names above are accepted.
Privacy and Security
Zero telemetry. No analytics, no tracking, no usage data collected.
Zero local caching. Every call goes directly to Microsoft Graph. No local email/calendar storage.
Zero third-party calls. The server only talks to
graph.microsoft.comandlogin.microsoftonline.com.Token storage. OAuth tokens are persisted via
azure-identity'sTokenCachePersistenceOptions. On macOS the OS Keychain is used; on Windows, DPAPI; on Linux with PyGObject/libsecret available, gnome-keyring. On Linux without libsecret (e.g. the isolated venv created byuv tool install), tokens fall back to a0600plaintext file at~/.IdentityService/and the MCP logs a one-time warning at startup. For encrypted storage on Linux, installpython3-gi gnome-keyring libsecret-1-0and re-create the venv with--system-site-packages.No logging of sensitive data. Message bodies, recipient addresses, and tokens are never logged.
Config permissions. Config directory is
0700, config file is0600. Symlinked configs are rejected.Input validation. All user inputs (email addresses, Graph IDs, OData filters, KQL queries, datetimes) are validated and sanitized before reaching the Graph API.
Development
# Install dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Lint
uv run ruff check src/ tests/
# Format
uv run ruff format src/ tests/
# Run server locally (stdio)
uv run outlook-mcpRequirements: Python 3.10+
Roadmap
Inbox Rules -- list, create, delete rules
Advanced mail -- raw MIME export, internet message headers
Calendar -- cancel event (with attendee notification)
Checklists -- checklist items on To Do tasks
Enterprise (Entra ID) -- work/school account support
License
MIT. See LICENSE.
Available Tools
43 toolsoutlook_attach_to_draftA
Add attachments to an existing draft; auto-switches to upload-session for files >3MB.
attachment_paths must be absolute paths to files that exist on the host. Returns new
attachment IDs for later removal via outlook_remove_draft_attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| attachment_paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses auto-switching to upload session for files >3MB, path existence requirement, and return of attachment IDs. Annotations (readOnlyHint=false, destructiveHint=false) are consistent; description adds value 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?
Two concise sentences with no filler. First sentence covers purpose and key behavior; second covers requirements and return value. Well 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?
Explains return value (attachment IDs) and usage context (existing draft, large file handling). Lacks error conditions or prerequisites but sufficient for a straightforward attachment 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?
Adds meaning to attachment_paths (must be absolute paths, must exist) but draft_id receives no additional context. With 0% schema coverage, description partially compensates.
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?
Explicitly states the action (add attachments), target (existing draft), and a key behavior (auto-switch for large files). Clearly distinguishes from siblings like outlook_remove_draft_attachment and outlook_send_with_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?
Provides a critical requirement (absolute paths to existing files) and hints at workflow by mentioning attachment IDs for removal. However, does not explicitly contrast with alternatives like outlook_send_with_attachments or outlier cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_batch_triageA
Triage up to 20 messages in one $batch call.
action is "move", "flag", "categorize", or "mark_read".
Example: outlook_batch_triage(message_ids=[id1, id2], action="move", value="Archive")
value is the action target (folder name for move, status for flag/mark_read, category name
for categorize). Hard cap of 20.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| action | Yes | ||
| message_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate mutation but no destruction. Description adds batch behavior, hard cap, and example, confirming it modifies messages without being destructive.
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 concise sentences with an example, no fluff. Purpose and parameters are 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?
Covers key aspects—batch size, actions, parameters—for a mutating batch tool. No output schema, but return likely success/failure; description could mention result, but 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 coverage is 0%, but description fully explains action values (move, flag, categorize, mark_read) and value meaning (folder name, status, category name). Example illustrates usage. Message_ids implied as list of IDs.
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 it triages up to 20 messages in a batch call, with specific actions (move, flag, categorize, mark_read). Distinguishes from sibling tools that operate on single messages or other 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?
Explicitly defines batch scope and hard cap of 20, indicating bulk usage. Does not explicitly state when not to use or provide alternatives, but context implies it for batch operations instead of individual tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_changes_sinceARead-only
One structured "since last call" digest across mail, events, and contacts.
Use this for recurring agent loops (morning brief, hourly inbox sweep) — one call returns counts, urgent_flagged mail, by-sender rollup, plus new/cancelled events and contacts counts. Use the three individual delta tools (outlook_list_inbox_delta, outlook_list_events_delta, outlook_list_contacts_delta) when you need raw item lists or per-resource control.
Example: first call: outlook_changes_since(); next:
outlook_changes_since(delta_tokens=).
First call returns a snapshot filtered to the last fallback_window_hours (default 24)
so the digest doesn't surface thousands of historical items; subsequent calls (tokens
passed back) return only what changed. Each resource's token is independent — drop
one stale token without re-syncing the others. If Graph 410s on a token
(syncStateNotFound), that resource auto-resyncs and _meta.resync lists which one.
urgent_flagged = high-importance OR flagged mail. by_sender = top 5 senders.
Calendar modified[] is reserved for future use — modified events surface in new[]
today (Graph delta doesn't distinguish them). Calendar organizer_email is also
currently empty (the v1.9.0 delta formatter surfaces the organizer name only).
| Name | Required | Description | Default |
|---|---|---|---|
| delta_tokens | No | ||
| fallback_window_hours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: fallback window to avoid historical items, independent tokens for each resource, auto-resync on 410 errors, and specifics about return fields (urgent_flagged, by_sender, calendar quirks). Adds value beyond readOnlyHint 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?
Description is detailed but well-organized with paragraphs and examples. Every sentence adds value, though slightly longer than 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?
Despite no output schema, the description thoroughly explains return fields and edge cases (410 errors, resync, calendar quirks). Covers all necessary context for effective 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?
With 0% schema coverage, the description fully explains both parameters: delta_tokens (object from prior response, independent per resource) and fallback_window_hours (default 24, purpose of filtering historical items).
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 provides a 'structured digest across mail, events, and contacts' and distinguishes from sibling delta tools which return 'raw item lists or per-resource control'.
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 recommends use for 'recurring agent loops' and gives concrete usage scenarios: 'morning brief, hourly inbox sweep'. It explains when to use alternatives and provides a clear example of first call vs subsequent calls with delta_tokens.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_copy_messageA
Copy a message to another folder (duplicates; source is unchanged).
Use outlook_move_message to remove from source. folder accepts display names, well-known
names, or Graph IDs — prefer names.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | ||
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral trait that copying duplicates the message and leaves the source unchanged, which aligns with the annotations (destructiveHint: false). No additional context like auth or rate limits is provided, but the description adds 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 exceptionally concise: two sentences with no redundancy. Every word serves a purpose, making it efficient for an AI agent 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 simple copy operation with no output schema, the description covers the core purpose, usage guidelines, and folder input format. It omits potential details like return values or error handling, but these are not critical given the tool's straightforward nature.
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 0% schema description coverage, the description must compensate. It does so partially by explaining that the folder parameter accepts display names, well-known names, or Graph IDs (preferring names). However, the message_id parameter is not described, leaving a gap.
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 another folder') and specifies the behavior ('duplicates; source is unchanged'). It effectively distinguishes the tool from the sibling outlook_move_message by noting it does not remove the source.
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 guides the agent on when to use this tool vs. the alternative: 'Use outlook_move_message to remove from source.' It also provides practical instructions for the folder parameter, mentioning acceptable input formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_create_contactC
Create a new contact with name and optional email, phone, company, title.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| title | No | ||
| company | No | ||
| last_name | No | ||
| first_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive write. The description adds minimal behavioral context, such as any duplicate handling, permission requirements, or default folder 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?
A single, front-loaded sentence efficiently conveys the tool's purpose with no redundant 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?
Given 6 parameters, no output schema, and no schema descriptions, the description is too minimal. It lacks information on return values, typical usage patterns, and important constraints.
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 0% schema description coverage, the description lists key fields (email, phone, company, title) but does not explain their semantics or clarify that last_name is optional while first_name is required.
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 creates a contact with name and optional fields, distinguishing it from sibling tools like outlook_update_contact or outlook_delete_contact. However, it does not explicitly differentiate from similar creation 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?
No guidance on when to use this tool versus alternatives like outlook_update_contact or outlook_search_contacts. The description does not specify prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_create_draftA
Create a draft email for later review/send (pair with outlook_send_draft).
Use this when a human should review before sending; use outlook_send_message to send immediately without review. Pass deferred_send_datetime (ISO 8601, e.g. "2026-05-06T08:00:00Z") to schedule delayed delivery — Exchange holds the message server-side after outlook_send_draft. Pass reply_to to pre-populate the Reply-To header.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| is_html | No | ||
| subject | Yes | ||
| reply_to | No | ||
| importance | No | normal | |
| deferred_send_datetime | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive. The description adds context about the draft creation behavior, and clarifies that deferred_send_datetime holds the message server-side after sending. 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 four sentences, front-loaded with the core purpose. It is efficient but could be slightly more concise by removing redundant phrasing.
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 9 parameters (3 required) and no output schema, the description provides adequate high-level context but lacks detail on optional parameters and return value expectations. It is minimally complete for a standard email draft 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 0%, so the description must compensate. It explains only deferred_send_datetime and reply_to, but fails to describe 7 other parameters (to, subject, body, cc, bcc, is_html, importance), which are somewhat standard but still need explicit documentation for an AI agent.
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 creates a draft email for later review/send and explicitly pairs it with outlook_send_draft. It distinguishes from siblings by mentioning outlook_send_message for immediate sending.
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 (when human review is needed) versus alternatives (use outlook_send_message for immediate send). It also explains the deferred_send_datetime parameter for scheduling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_create_eventA
Create a calendar event with optional attendees, recurrence, and Teams online meeting.
Example: outlook_create_event(subject="Q3 review", start="2026-08-15T14:00:00Z",
end="2026-08-15T15:00:00Z", attendees=["alice@acme.com"], is_online=True)
start/end are ISO 8601. recurrence accepts a simple string ("daily", "weekly", "monthly").
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| body | No | ||
| start | Yes | ||
| subject | Yes | ||
| location | No | ||
| attendees | No | ||
| is_online | No | ||
| is_all_day | No | ||
| recurrence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, which align with a create operation. The description adds that it can include attendees, recurrence, and Teams meeting, but does not disclose side effects (e.g., attendee notifications) or behavior beyond these features.
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 plus an example. The core action is front-loaded, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does not mention return value or success confirmation. It adequately covers the required parameters but omits details on optional parameters and post-creation state, making it partially 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 0%, so the description must compensate. It explains start/end are ISO 8601 and recurrence accepts simple strings, and includes an example. However, it leaves 6 parameters (body, location, is_all_day, etc.) undescribed, which is insufficient given the low 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 'Create a calendar event' with the specific verb 'Create' and resource 'calendar event'. It also mentions optional features (attendees, recurrence, online meeting), 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 does not explicitly state when to use this tool versus alternatives (e.g., use for new events, use outlook_update_event for modifications). The tool name and context imply usage, but no exclusions or conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_create_folderA
Create a mail folder; pass parent_folder (name or ID) to nest under an existing folder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent_folder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with annotations (readOnlyHint=false, destructiveHint=false). Adds behavioral detail about nesting via parent_folder, which is not covered by 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 sentence, front-loaded with action. Every word is necessary; 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?
Sufficient for a simple creation tool. No output schema needed. Implicitly uses current account context. Could mention mailbox context, but not required.
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?
Description explains the parent_folder parameter's purpose (nesting by name or ID). The name parameter is self-explanatory. Adds meaning beyond the schema, which has 0% 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?
Clearly states 'Create a mail folder' with specific verb and resource. Distinguishes from sibling tools like outlook_delete_folder and outlook_rename_folder by focusing on creation and nesting.
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?
States when to use (to create a folder) and how to nest using parent_folder. No explicit when-not-to-use, but the context is clear given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_create_taskA
Create a Microsoft To Do task with optional due date, importance, body, and recurrence.
Example: outlook_create_task(title="Send invoice", due="2026-09-01", importance="high")
due is ISO 8601. importance is "low", "normal", or "high". Defaults to the user's default
list when list_id is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | ||
| body | No | ||
| title | Yes | ||
| list_id | No | ||
| reminder | No | ||
| importance | No | ||
| recurrence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the tool is a non-destructive write. The description adds context about default behavior and importance options. It does not mention any side effects (e.g., notification behavior), but it is transparent about the core 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 two concise sentences plus a clear example. It front-loads the essential action and uses no unnecessary words. Every sentence adds 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?
With 7 parameters (1 required) and no output schema, a more complete description could explain the format of 'recurrence' (e.g., object structure) and the behavior of 'reminder' (e.g., default value, format). The current description covers only the most common 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 0%, so the description must compensate. It explains 'due' format (ISO 8601), 'importance' values, and default list behavior. However, parameters like 'body', 'reminder', and 'recurrence' are not elaborated, leaving gaps. The example provides practical 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 purpose: 'Create a Microsoft To Do task' and lists optional fields. The name 'outlook_create_task' is self-explanatory, and the tool is well-distinguished from siblings like 'outlook_update_task' or 'outlook_list_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?
The description includes an example and explains default behavior (defaults to user's default task list), and provides format constraints for 'due' and 'importance'. However, it does not explicitly state when to use this tool versus alternatives, though the sibling names imply the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_delete_contactCDestructive
Delete a contact by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (destructiveHint=true) but does not add behavioral context beyond what annotations already provide. For instance, it does not disclose whether deletion is permanent, requires confirmation, or impacts related data. With annotations present, the description should add context but fails to do so.
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 sentence with no wasted words. It could potentially benefit from a bit more detail, but it remains appropriately sized for a simple tool.
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 and no output schema, the description is minimally adequate: it states the core action. However, it lacks detail on error handling, expected response, or ID format, which limits completeness for an agent that must produce correct arguments.
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 0% and the description does not explain the 'contact_id' parameter's format, source, or constraints. The agent must infer that it is an identifier without any additional 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 'Delete a contact by ID' clearly states the action (delete), the resource (contact), and the identifier mechanism (by ID), which distinguishes it from sibling tools like update, get, or create contact.
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 (e.g., outlook_update_contact) or any prerequisites such as the existence of the contact. The agent receives no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_delete_draftBDestructive
Delete a draft message by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'delete', which matches the destructiveHint: true annotation, but adds no further behavioral detail (e.g., irreversibility, cascading effects, or permissions). With annotations already indicating destructiveness, the description contributes no new 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 a single, front-loaded sentence that conveys the core action efficiently. However, it is so brief that it sacrifices useful detail, making it borderline for conciseness rather than under-specification.
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 delete-by-ID operation with annotations covering destructiveness, the description is minimally adequate. It lacks prerequisites, error conditions, or return value expectations, but no output schema exists. The tool's simplicity justifies a moderate 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?
Schema description coverage is 0% for the single parameter (draft_id). The description mentions deletion 'by ID' but does not clarify the ID format, source, or validation constraints. This does not compensate for the missing 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 'Delete a draft message by ID' uses a specific verb (delete) and resource (draft), clearly differentiating it from sibling tools like outlook_delete_contact or outlook_delete_event. The action and target 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?
No guidance is provided on when to use this tool versus alternatives. For instance, there is no mention of conditions for deletion or distinction from outlook_update_draft or outlook_send_draft. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_delete_eventADestructive
Delete a calendar event by ID (cancels and notifies attendees if you're the organizer).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint: true and readOnlyHint: false. The description adds valuable behavioral context: it cancels and notifies attendees if the user is the organizer. 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?
A single, well-structured sentence that immediately conveys the essential action and a key behavioral detail. No extraneous information, 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 delete operation with one parameter and no output schema, the description is fairly complete. It covers the core action, the notification behavior, and the context of being the organizer. It could mention error conditions like non-existing events, but for this level of complexity, it suffices.
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 sole parameter 'event_id' lacks any description in the input schema (0% coverage). The tool description does not provide additional meaning about the parameter, such as format or source, which is expected given the low 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 the action 'Delete' and the resource 'calendar event by ID', distinguishing it from sibling tools like update_event or create_event. The additional context about attendee notification further clarifies the specific 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 specifies the action and its effect but does not explicitly guide the agent on when to use it versus alternatives (e.g., canceling without notification). The context about organizer status is helpful, but explicit usage context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_delete_folderADestructive
Delete a user-created mail folder by ID; refuses well-known folders (inbox, sentitems).
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds that it refuses certain folders, providing safety 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?
Single sentence, front-loaded with action and constraint. 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 simple delete tool with one param and annotations covering destructiveness, the description is complete, addressing the key behavioral constraint (refusing system folders).
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 0% for the single parameter. The description says 'by ID' but doesn't specify format or how to obtain it. Minimal added 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?
Description clearly states it deletes a user-created mail folder by ID and explicitly refuses well-known folders (inbox, sentitems). This distinguishes it from sibling tools like rename or create.
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 user-created folders only, and by ID. It doesn't explicitly state when not to use, but the refusal of well-known folders provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_delete_inbox_overrideBDestructive
Delete a Focused Inbox per-sender override rule by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| override_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so mutation is expected. The description does not add further behavioral details such as permanence or permission requirements, but is consistent with 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 that efficiently conveys the core function. It is front-loaded and has no filler, though it could be enriched with a bit more context 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?
For a simple destructive tool with one parameter and no output schema, the description provides the minimum viable information. However, it omits how to obtain the override_id and any post-deletion effects, leaving some gaps for a complete understanding.
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 0% with no parameter descriptions. The description only implies the parameter is an ID by using 'by its ID', but does not explain format, source, or constraints. Minimal added 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 clearly states the action ('Delete') and the specific resource ('Focused Inbox per-sender override rule by its ID'). It is distinct from sibling tools like outlook_delete_contact which delete different 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?
No guidance is provided on when to use this tool, prerequisites (e.g., obtaining the override ID), or alternatives. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_download_attachmentB
Download an attachment from a message and write decoded bytes to save_path on the host.
| Name | Required | Description | Default |
|---|---|---|---|
| save_path | Yes | ||
| message_id | Yes | ||
| attachment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it writes decoded bytes to a path, which is a side effect. Annotations mark destructiveHint=false but does not clarify potential overwrite or permission issues. Basic transparency but lacks 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?
Single sentence that is front-loaded with the key action. Efficient and to the point, though slightly terse for the complexity involved.
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?
Three required parameters and no output schema or error handling. Lacks information on return values, error conditions, or handling of large attachments. Under-specified for a tool that writes to the filesystem.
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 0%, yet description only mentions save_path vaguely. No explanation for message_id or attachment_id format, or how they are obtained. Adds minimal value beyond parameter names.
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 (download), resource (attachment from a message), and destination (host file system via save_path). Distinguishes from sibling tools like outlook_attach_to_draft and outlook_list_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?
No guidance on when to use this tool versus alternatives, no prerequisites, and no conditions for appropriate use. The description does not explain when to prefer this over other attachment-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_get_contactARead-only
Get one full contact by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations include readOnlyHint=true, indicating a read operation. The description's 'Get' aligns with this. It adds the detail 'full contact', implying the returned data is comprehensive, which is useful 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 a single sentence with five words, extremely concise and front-loaded. Every word adds value with no 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 get-by-ID tool with one parameter and annotations present, the description is nearly complete. It lacks details on the return structure, but given no output schema, it is adequate for an agent to understand the tool's 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?
Schema description coverage is 0%. The description mentions 'by ID' but does not explain the format or source of contact_id. For a single required parameter with no schema description, more context would be beneficial.
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 'Get', the resource 'contact', and the scope 'one full contact by ID'. It distinguishes from sibling tools like outlook_list_contacts (list) and outlook_search_contacts (search).
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 provide when to use or when not to use this tool versus alternatives. The context is implied from the purpose, but there is no explicit guidance or mention of related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_get_eventARead-only
Get one full calendar event by ID, including body, attendees, organizer, and recurrence.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds that it returns a full event. However, it does not disclose error behavior or prerequisites (e.g., event must 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?
Single sentence with 12 words, no redundancy. Every word adds value, making it highly 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 simple read tool with one parameter and no output schema, the description adequately covers what is returned and the input. Minor gaps like error handling do not significantly reduce 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 0%, and the description only mentions 'by ID' without explaining the format or source of the event_id. More detail (e.g., 'event ID from list_events') would enhance usability.
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 tool retrieves a full calendar event by ID and lists included fields (body, attendees, organizer, recurrence). This distinguishes it from sibling tools like outlook_list_events or outlook_update_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 implies usage when needing full event details, but provides no explicit guidance on when not to use it or alternatives. Sibling tools like outlook_list_events exist for listing, but no comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_get_mail_tipsARead-only
Pre-send check for recipients: out-of-office, delivery limits, mailbox-full warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool performs a read-only check (consistent with readOnlyHint annotation) and specifies the type of information returned. No contradictions with annotations. It adds context beyond the annotation by detailing the check 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 a single sentence that concisely conveys the tool's purpose and behavior. Every word adds value, 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?
Given the simple input (one array parameter) and readOnlyHint annotation, the description adequately explains the tool's function. It could optionally mention that tips are returned per email, but the current description is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter, 'emails', with 0% description coverage. The description mentions 'recipients' but does not explicitly name the parameter or add meaning about its format (e.g., array of email addresses). The single parameter is somewhat obvious, but the description fails to clarify the expected input structure.
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 is for a 'pre-send check' for recipients, listing specific types of mail tips (out-of-office, delivery limits, mailbox-full warnings). This is a distinct purpose that separates it from sibling tools, which involve reading, drafting, or sending 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 implies usage before sending emails to check recipient status. It indicates context ('pre-send') but does not explicitly state when not to use it or suggest alternatives. However, among sibling tools, sending tools are present, providing indirect guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_accountsARead-only
List all configured Outlook accounts and their authentication status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that the tool returns authentication status, which goes beyond the readOnlyHint annotation. However, the annotation already declares the tool as read-only, and the description does not disclose additional behavioral traits like potential delays or side effects. The added value is modest.
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 sentence that is concise, front-loaded, and contains no wasted words. It immediately conveys the tool's 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 simple, parameterless list tool, the description is adequate. It explains the output (accounts and auth status), which suffices for basic understanding. No output schema exists, so additional detail on return format could be beneficial but is 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?
No parameters exist, so schema coverage is 100% vacuously. Per guidelines, baseline is 4. The description adds value by specifying what the tool returns (accounts and authentication status), which is helpful for an agent.
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 all configured Outlook accounts and their authentication status, using a specific verb ('List') and resource ('accounts'). It is distinct from sibling tools, which focus on other operations like sending drafts or managing contacts.
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. However, given the tool has no parameters and lists accounts, the intended use is straightforward. Sibling tools like outlook_switch_account imply a different purpose, but exclusion criteria are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_attachmentsARead-only
List attachments on a message — returns IDs, names, sizes, and content types.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds return field details but omits potential errors, pagination, or size limits. With annotations covering the core safety, 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?
Single sentence with no wasted words. Front-loaded with verb and resource, then return details. Perfectly 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 simple list tool with one parameter, the description is fairly complete: it states the action and return fields. No output schema exists, but the description compensates partially. Missing details like authentication or response format, but the system context likely covers those.
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 0%, so description must explain parameters. The description does not mention message_id at all; it only says 'on a message'. The parameter name is self-descriptive, but description fails to add explicit meaning. This is a gap.
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?
Description clearly states verb 'list', resource 'attachments on a message', and enumerates returned fields (IDs, names, sizes, content types). This distinguishes it from siblings like outlook_download_attachment (downloads) and outlook_attach_to_draft (adds).
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?
Context is clear: use to list attachments given a message_id. However, no explicit guidance on when not to use or alternatives beyond the name itself. The description provides sufficient context for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_calendarsARead-only
List all calendars available to the authenticated user (primary + secondary).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond the readOnlyHint annotation by specifying that it returns primary and secondary calendars. Annotations already indicate read-only, so the description supplements 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 a single, concise sentence that immediately conveys the tool's purpose. No extraneous words or information, perfectly 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?
Given the tool has no parameters, no output schema, and annotations provide safety context, the description is complete. It fully informs the agent of what the tool does and its scope.
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 schema coverage is 100%. The description does not need to add parameter information. According to guidelines, baseline is 4 for 0 parameters, and no additional param info 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 'List all calendars available to the authenticated user (primary + secondary).' It uses a specific verb 'List' and resource 'calendars', and distinguishes itself from sibling tools by specifying the scope and inclusion of primary and secondary 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 implies that this tool is used when you need a list of all calendars, which is a simple and clear use case. However, it does not explicitly mention alternatives or when not to use it, but given there are no parameters and the purpose is straightforward, it's sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_categoriesARead-only
List the user's master category definitions (names + colors).
Provides the valid values for outlook_categorize_message.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is present, and the description confirms a read-only operation ('List'). No contradictions, and the description adds context about return values (names+colors).
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 the core action. No wasted words, and the second sentence adds valuable context about its relationship to another tool.
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 parameters, no output schema, and a readOnlyHint annotation, the description is complete: it states what is returned and why it is useful.
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 zero parameters with 100% coverage (by default). The description does not need to add parameter info, and the baseline for 0 parameters is 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 clearly states the action ('List the user's master category definitions') and the output (names + colors). It also distinguishes its purpose by noting it provides valid values for another tool (outlook_categorize_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 implies when to use the tool (before categorizing a message to get allowed categories) and references a sibling tool (outlook_categorize_message). It does not explicitly state when not to use it, 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.
outlook_list_contactsARead-only
List contacts with cursor pagination.
Use for one-shot queries; use outlook_list_contacts_delta for polling/recurring agents.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, describing a safe read operation. The description adds the cursor pagination detail. Otherwise no extra info on rate limits, permissions, or other behavioral traits. Adequate but minimal 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?
Two clean sentences with no wasted words. Front-loaded with core functionality, then usage distinction. Ideal 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?
The description is adequate for a simple list tool with pagination, but lacks details about what the tool returns (e.g., list of contacts). Given no output schema, some mention of the response 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 0%, so description must add meaning. It mentions 'cursor pagination' which loosely relates to the cursor parameter, but provides no explanation of count, cursor format, or how they work. Very limited added 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 tool lists contacts with cursor pagination (verb+resource+pagination). It hints at a different use vs. the delta variant, but doesn't explicitly distinguish from other contact listing tools like outlook_search_contacts.
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 when to use this tool (one-shot queries) and when to use an alternative (outlook_list_contacts_delta for polling/recurring). This is clear and differentiation guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_contacts_deltaARead-only
List only contact changes since the last call.
Use this for polling/recurring agents — typically 10x cheaper than outlook_list_contacts after the first call. Use outlook_list_contacts for one-shot queries.
Example: first call: outlook_list_contacts_delta(); next: outlook_list_contacts_delta(delta_token=). is_deleted=True items are tombstones (drop cached payload). has_more=True means drain immediately by passing the returned delta_token back.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| delta_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and description adds important behavioral details: tombstones (is_deleted=True items should be dropped), pagination (has_more means drain immediately), and cost implications. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise yet comprehensive. First sentence clearly states purpose, followed by usage guidance, example, and edge cases. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delta/polling tool with no output schema, the description sufficiently covers return behavior (tombstones, has_more), pagination strategy, and cost benefits. Complete enough for effective 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?
Schema coverage is 0%, so description must compensate. It explains delta_token as a token from prior response and the has_more pattern, but does not detail page_size defaults or ranges. Adequate for context.
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?
Description clearly states 'List only contact changes since the last call' with a specific verb and resource. It distinguishes itself from sibling tools like outlook_list_contacts (full list) and outlook_list_events_delta (different 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?
Explicitly recommends use for polling/recurring agents, notes cost advantage over outlook_list_contacts, and advises using outlook_list_contacts for one-shot queries. Provides example usage and explains pagination with has_more and delta_token.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_eventsARead-only
List calendar events in a date range (expands recurring instances).
Use for one-shot queries; use outlook_list_events_delta for polling/recurring agents.
Pass concise=True to drop large fields (body, attendees, organizer, categories) — ~10x fewer tokens for day-at-a-glance scans.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| after | No | ||
| count | No | ||
| before | No | ||
| cursor | No | ||
| concise | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which is consistent. Description adds behavioral traits: expands recurring instances and mentions the concise parameter drops large fields (body, attendees, organizer, categories) for ~10x fewer tokens. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no fluff. Front-loaded core purpose, then usage guidance, then parameter hint. Every sentence adds 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?
Describes key behavioral trait (recurring expansion) and concise mode, but lacks explanation of return values (no output schema) and other parameters. For a list tool with 6 parameters, marginally sufficient 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 0%, so description must compensate. It only explains the 'concise' parameter (its effect and token savings). Other parameters (days, after, before, count, cursor) are not elaborated, leaving meaning uncovered.
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 'List calendar events in a date range (expands recurring instances).' This clearly identifies the verb (list), resource (calendar events), and scope (date range, recurring expansion). It distinguishes from sibling tools like outlook_list_events_delta and outlook_rsvp.
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 'Use for one-shot queries; use outlook_list_events_delta for polling/recurring agents.' This provides clear when-to-use and when-not-to-use guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_events_deltaARead-only
List only calendar event changes within a window since the last call.
Use this for polling/recurring agents — typically 10x cheaper than outlook_list_events after the first call. Use outlook_list_events for one-shot queries.
Example: first call: outlook_list_events_delta(start="2026-05-22T00:00:00Z", end="2026-05-29T00:00:00Z"); next: outlook_list_events_delta(delta_token=). start/end (ISO 8601) required on first call only; the cursor encodes the window thereafter. is_deleted=True items are tombstones. has_more=True means drain immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| page_size | No | ||
| delta_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already indicates readOnlyHint=true. The description adds useful behavioral context: explains the delta token mechanism, first-call requirements, and the meaning of is_deleted and has_more fields. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (4 sentences plus example) and front-loaded: purpose first, then usage guidance, then example, then additional notes. Every sentence adds unique value with no 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 complexity of a delta endpoint and the absence of an output schema, the description covers the key behaviors (paginated result, is_deleted tombstones, has_more flag). It could be slightly more explicit about the response structure (e.g., that it returns event objects), but is largely 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 0%, so the description carries the full burden. It explains start/end (required on first call, ISO 8601), delta_token (used subsequently), but does not describe page_size. This covers 3 of 4 parameters with meaningful context.
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 it lists 'calendar event changes within a window since the last call,' which is specific and actionable. It clearly distinguishes from the sibling tool outlook_list_events by positioning this as the delta/change-tracking variant.
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 guidance: 'Use this for polling/recurring agents — typically 10x cheaper than outlook_list_events after the first call. Use outlook_list_events for one-shot queries.' This directly tells the agent when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_foldersARead-only
List mail folders with message counts, parent_id, and child count.
Default is top-level only; pass recursive=True to walk the full tree and resolve subfolder names.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds behavioral context about recursion resolving subfolder names. No mention of pagination or performance, but adequate for a read-only list 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?
Two sentences, no redundant words. Front-loaded with purpose and key details. Efficient and 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?
No output schema; the description lists returned fields (message counts, parent_id, child count) adequately. However, the cursor parameter is not addressed, and some potential behavior like pagination is omitted.
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 0%. The description explains the recursive parameter but does not mention the cursor parameter, leaving its purpose unclear. Only one of two parameters is documented.
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 mail folders and specifies the returned data (message counts, parent_id, child count). It distinguishes from siblings like outlook_create_folder or outlook_delete_folder by focusing on read-only listing.
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 default behavior (top-level only) and when to use recursive=True. It doesn't explicitly state when not to use the tool, but the context of siblings makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_task_listsARead-only
List all Microsoft To Do task lists for the current user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by specifying the scope ('for the current user'). It confirms no destructive effects and aligns 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?
A single sentence that is concise and front-loaded with the action and resource. Every word is necessary and informative.
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-parameter read-only listing tool, the description is complete. It tells what the tool does, its scope, and its safety. No output schema is needed as return format is standard.
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?
No parameters exist, so the schema coverage is 100%. The description does not need to add parameter details, and the baseline score of 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 clearly states the verb 'List' and resource 'task lists', and the name 'outlook_list_task_lists' is specific. It distinguishes from sibling tools like 'outlook_list_tasks' which lists tasks within a list.
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 use when you need all task lists for the current user. It does not explicitly state when not to use it or mention alternatives, but for a simple list operation this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_tasksBRead-only
List tasks in a To Do list with optional status filter.
status: "notStarted", "inProgress", or "completed".
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| cursor | No | ||
| status | No | ||
| list_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, consistent with 'list'. Description adds no further behavioral details (e.g., pagination behavior via cursor, count defaults). 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?
Two sentences, no extraneous information. Essential facts front-loaded. Every sentence adds 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?
Lacks details on pagination (cursor, count defaults), return format, and the role of list_id. For a list tool with no output schema, this is insufficient for full understanding.
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 0%, so description must explain parameters. It only documents the 'status' parameter with allowed values. 'count', 'cursor', and 'list_id' are not explained, leaving 3 of 4 parameters underspecified.
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?
Description clearly states the action 'list tasks', the resource 'in a To Do list', and the optional 'status' filter. It distinguishes from sibling tools like outlook_list_task_lists by specifying tasks within a list.
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 (e.g., outlook_list_task_lists, outlook_create_task). The description only mentions an optional filter but does not explain prerequisites or exclusive conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_threadARead-only
List all messages in a conversation thread, chronological order.
Needs conversation_id from a message's metadata. Pass concise=True to drop large fields
(quoted prior-message text in each preview) — ~10x fewer tokens on long reply chains.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| concise | No | ||
| conversation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explains ordering (chronological) and the effect of the concise parameter, adding behavioral context beyond the readOnlyHint annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, followed by prerequisite and a performance tip. No unnecessary 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?
Covers ordering, prerequisite, and concise hint. Does not mention pagination or maximum results, but for a straightforward list tool with annotations, it is nearly 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?
Explains conversation_id (prerequisite) and concise (effect), but does not explain the count parameter (default 50). With 0% schema description coverage, the description partially compensates but leaves a gap.
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?
Description clearly states 'List all messages in a conversation thread, chronological order.' It uses a specific verb and resource, distinguishing it from siblings like outlook_read_message (single message) or outlook_list_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?
Explicitly mentions prerequisite 'Needs conversation_id from a message's metadata' and provides a tip for using concise=True on long threads. Does not compare to siblings or state when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_read_messageARead-only
Get one full message by ID. format is "text", "html", or "full" (both).
Pass include_deferred_send=True to also return the scheduled-send time (PR_DEFERRED_SEND_TIME) as deferred_send_datetime — useful when recreating a delayed draft. Pass concise=True to drop large fields (body, body_html) and return a 200-char body_preview — ~10x fewer tokens for triage scans.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | text | |
| concise | No | ||
| message_id | Yes | ||
| include_deferred_send | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that concise=True drops large fields and returns a preview, and include_deferred_send returns scheduled-send time. 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 efficient: a two-sentence intro plus two brief bullet points. Front-loaded with core purpose, 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?
Given no output schema, the description covers parameter effects and return modifications. Could mention default response structure, but the detail provided is sufficient for effective 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?
Since schema coverage is 0%, the description compensates by explaining format values, concise behavior, and deferred send parameter. Message_id is self-explanatory. Adds necessary 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 clearly states the tool retrieves one full message by ID, with specific format options. This distinguishes it from sibling tools like outlook_list_thread or outlook_download_attachment.
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 guidance on when to use concise mode for token-saving triage and include_deferred_send for scheduled times. However, it lacks explicit contrast with alternatives like outlook_batch_triage 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.
outlook_remove_draft_attachmentBDestructive
Remove a single attachment from a draft message by attachment ID.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| attachment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations set 'destructiveHint: true', the description only says 'remove' without elaborating on side effects, irreversibility, or any other behavioral traits 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?
A single, front-loaded sentence with no extra words. Every part is essential.
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 basic purpose for a simple 2-parameter tool, but lacks usage guidelines and behavioral context. Adequate for minimal functionality.
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 0%, and the description only mentions 'by attachment ID' but does not clarify the role of 'draft_id' or add meaning beyond the parameter names.
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 (remove), target (attachment from a draft message), and key identifier (attachment ID). It is distinct from sibling tools like 'outlook_attach_to_draft' and 'outlook_download_attachment'.
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 (e.g., 'outlook_download_attachment'), nor any prerequisites or context for invoking it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_rename_folderC
Rename a user-created mail folder by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| folder_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds no new behavioral traits, such as error handling 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 a single, front-loaded sentence with no wasted words. However, it is too brief and omits useful details that could be added 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?
Given a simple operation with 2 parameters and annotations present, the description is minimal. It lacks context about error conditions, permissions, or which folders are eligible (e.g., only user-created, not defaults).
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 0%, so the description must compensate. It only clarifies that folder_id is used 'by ID,' but fails to explain the 'name' parameter's purpose or constraints (e.g., valid characters, length).
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 'Rename a user-created mail folder by ID.' It specifies the verb (rename), resource (mail folder), and method (by ID), distinguishing it from sibling tools like create or delete.
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 vs alternatives, such as not renaming system folders. It lacks context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_rsvpA
RSVP to a calendar meeting invite. response is "accept", "decline", or "tentative".
Use this for meeting invites; use outlook_reply to reply to a regular email message.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | ||
| event_id | Yes | ||
| response | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description adds that it sends an RSVP, which modifies invite status; no contradictions, but could mention downstream effects like email notifications.
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, zero waste, front-loaded with action and key parameter 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?
Given 3 parameters, no output schema, and no nested objects, description covers action, distinction from sibling, and key parameter; could be more complete on optional 'message' 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 coverage is 0%; description explains the 'response' parameter with valid values, but does not elaborate on 'event_id' or optional 'message' parameter, partially compensating.
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 'RSVP to a calendar meeting invite' with specific verb and resource, and distinguishes from sibling tool 'outlook_reply' for regular emails.
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 'Use this for meeting invites; use outlook_reply to reply to a regular email message,' providing clear context and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_search_contactsARead-only
Search contacts by name or email using KQL query syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, confirming a read operation. The description adds the behavioral detail of using 'KQL query syntax' but does not disclose permissions, rate limits, or other traits. Since annotations already cover the read safety, the description does not significantly extend 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 single-sentence description is extremely concise and front-loaded with the essential purpose and method. 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?
No output schema exists, so the description should clarify return format or behavior (e.g., max results, empty result handling). It does not, making it incomplete for an agent to confidently use 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 0%, so the description must compensate. It mentions searching by name or email via KQL, giving context for the 'query' parameter. However, the 'count' parameter is entirely unaddressed, leaving a gap.
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 'Search', the resource 'contacts', and the method 'by name or email using KQL query syntax'. It effectively distinguishes the tool from siblings like 'outlook_list_contacts' and 'outlook_get_contact'.
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 searching contacts, contrasting with listing or getting specific contacts. However, it does not explicitly state when not to use this tool or mention alternatives. The context is clear 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.
outlook_send_draftB
Send an existing draft (pair with outlook_create_draft for human-review send flow).
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not clarify what happens to the draft after sending (e.g., is it deleted or marked as sent?). Given the absence of output schema, more behavioral detail would be helpful.
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, well-structured sentence that immediately conveys the tool's purpose and a key usage pattern. Every word adds value, with 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?
Given the simple input (one parameter) and no output schema, the description covers the core use case. However, it lacks information on the result of sending (e.g., success/failure feedback) and how this tool differs from outlook_send_with_attachments.
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 single parameter draft_id has 0% schema coverage, but the description adds the qualifier 'existing', implying the draft must already exist. This adds slight meaning beyond the raw schema, but no format or validation details are provided.
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', identifying the verb (send) and resource (draft). It also pairs with outlook_create_draft, distinguishing it from other draft operations like outlook_delete_draft. However, it does not explicitly differentiate from outlook_send_with_attachments, which is a closely related 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 description suggests using this tool after creating a draft and for human-review flows, but it does not specify when not to use it or mention alternatives like outlook_send_with_attachments. There are no prerequisites or error conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_send_with_attachmentsA
Send an email with file attachments; auto-switches to upload-session for files >3MB.
attachment_paths must be absolute paths to files that exist on the host. Pass reply_to to
route replies to a different address.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| is_html | No | ||
| subject | Yes | ||
| reply_to | No | ||
| importance | No | normal | |
| attachment_paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only and not destructive. The description adds behavioral context: auto-switching to upload-session for files >3MB and requirement for absolute paths. This goes beyond annotations 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 two sentences, front-loading the purpose and a key behavior. Every sentence adds value 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?
The description covers the core functionality but omits return value, error handling, and details on parameters like importance or is_html. Given no output schema, more completeness would be needed for a 9-parameter 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 0%, so the description must explain parameters. It only clarifies two parameters (attachment_paths and reply_to) out of nine, leaving others like cc, bcc, is_html, and importance undocumented. Insufficient 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 explicitly states 'Send an email with file attachments', clearly indicating the verb and resource. It also adds a specific detail about auto-switching for large files, making the purpose distinct from siblings like outlook_send_draft.
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 some guidelines: attachment paths must be absolute and reply_to routes replies. However, it does not mention when to use this tool over alternatives such as outlook_send_draft or outlook_attach_to_draft, missing an opportunity to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_switch_accountA
Switch the active Outlook account by configured name (from outlook_list_accounts).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutability and non-destructiveness; description adds that the account is switched by name. No further behavioral details (e.g., effects on other sessions) but acceptable for a simple state change.
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 sentence, no fluff, includes all essential information and a reference to a sibling tool.
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?
Tool is simple with one parameter; description fully covers what the tool does, how to use it, and prerequisites. Output not 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?
Although schema has 0% coverage, the description explains that 'name' must be a configured account from 'outlook_list_accounts', adding critical context beyond the schema's 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 verb 'Switch', the resource 'active Outlook account', and specifies the parameter 'name' from a sibling tool, 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?
Explicitly references 'outlook_list_accounts' to obtain the name, guiding the agent on prerequisite action. Lacks explicit when-not-to-use but is sufficient for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_update_contactA
Update an existing contact (partial patch — only provided fields change).
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| last_name | No | ||
| contact_id | Yes | ||
| first_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the 'partial patch' behavior, which is a key behavioral trait beyond annotations (readOnlyHint=false indicates write, destructiveHint=false indicates not destructive). It adds value by clarifying that only provided fields change, preventing full-overwrite assumptions.
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 (9 words) that front-loads the action and key behavior. 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 simple patch tool with 5 parameters and no output schema, the description covers essential behavior but misses details like expected outcomes, error states, or how to obtain contact_id. Sufficient but not thorough.
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 0%, so the description must compensate. However, it only says 'only provided fields change' without explaining individual parameters (email, phone, etc.) or their types/constraints. Minimal added 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 clearly states the verb 'Update' and resource 'contact', and specifies 'partial patch — only provided fields change'. This distinguishes it from sibling tools like outlook_create_contact (creation) and outlook_delete_contact (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?
The description lacks explicit guidance on when to use this tool versus siblings. It does not mention prerequisites (e.g., obtaining contact_id from list_contacts) or when not to use it (e.g., for full replacement). Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_update_draftA
Update an existing draft (partial patch).
Pass is_html=True when body is HTML — required when overwriting a draft originally composed as HTML (consumer Outlook rejects Text-over-HTML PATCH). Pass reply_to=[...] to overwrite Reply-To; reply_to=[] to clear it. Pass deferred_send_datetime (ISO 8601) to set the scheduled-send time; empty string clears it.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| body | No | ||
| is_html | No | ||
| subject | No | ||
| draft_id | Yes | ||
| reply_to | No | ||
| deferred_send_datetime | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write, non-destructive operation. The description adds important behavioral context: the partial patch behavior, the requirement for is_html=True when overwriting HTML drafts, and how to set or clear reply_to and deferred_send_datetime. This goes beyond annotations and helps the agent understand edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—only four lines—and each sentence serves a distinct purpose. The purpose is front-loaded, and the subsequent lines provide critical parameter guidance without unnecessary 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?
Given the tool has 8 parameters (1 required) and no output schema, the description covers key parameter behaviors and constraints. However, it does not mention what the tool returns (likely the updated draft) or error conditions. Still, it provides enough context 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?
With 0% schema description coverage, the description compensates by explaining the semantics of is_html, reply_to, and deferred_send_datetime. While other parameters (to, cc, body, subject) are not elaborated, they are standard email fields and require less explanation. The description adds value for the most nuanced 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 clearly identifies the tool as updating an existing draft via a partial patch. The verb 'update' and resource 'draft' are explicit, and it distinguishes from siblings like outlook_create_draft, outlook_send_draft, and outlook_delete_draft.
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 specific usage conditions for key parameters (is_html, reply_to, deferred_send_datetime), which guides correct invocation. However, it lacks explicit guidance on when to use this tool versus alternative draft-related tools, though the purpose implicitly handles that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_update_eventA
Update fields on an existing event (partial patch — only provided fields change).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| body | No | ||
| start | No | ||
| subject | No | ||
| event_id | Yes | ||
| location | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-destructive hint (destructiveHint=false) and description adds key behavioral detail: 'partial patch — only provided fields change'. This goes beyond annotations, though it does not disclose potential side effects like calendar notification triggers.
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 that is extremely concise and front-loaded with the action. Every word serves a 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?
Given 6 parameters and no output schema, the description is too brief. It omits critical context such as permissions, validation behavior, or required resource existence. It only states the patch behavior, leaving significant gaps for an update 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 0% schema description coverage, the description does not provide any parameter-specific meanings beyond what the parameter names imply. It only reiterates the general patch behavior, failing to compensate for the missing 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 uses specific verb 'update' and resource 'event', and clarifies it's a partial patch. It distinguishes from create or get events, though does not explicitly differentiate from other update tools. The name itself provides clear context.
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 updating existing events but lacks explicit guidance on when to use versus alternatives like create, delete, or other update tools. No when-not or prerequisite information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_update_taskA
Update fields on a To Do task (partial patch — only provided fields change).
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | ||
| body | No | ||
| title | No | ||
| list_id | No | ||
| task_id | Yes | ||
| importance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false (write operation) and destructiveHint=false (not destructive). The description adds 'partial patch' context, indicating only provided fields change, which is a key behavioral trait 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?
Single sentence with 12 words, front-loaded with the action and resource, no wasted words. 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?
With 6 parameters and no output schema, the description lacks information on return values, error cases, or field constraints (e.g., date formats, importance levels). Incomplete for an update 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 0% for 6 parameters. The description provides no additional meaning for any parameter, leaving agents to infer from names alone (e.g., 'due', 'body'), which is insufficient for reliable 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 verb 'Update', the resource 'To Do task', and the important nuance 'partial patch — only provided fields change'. This distinguishes it from create and delete 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 use for updating specific fields but does not explicitly state when to use this tool versus alternatives like outlook_create_task or when not to use it (e.g., for full replacement). No prerequisites or exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_whoamiARead-only
Get the authenticated user's profile (display name, email, ID).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds the specific return fields, which is useful but not deep behavioral context. 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?
Single sentence with front-loaded verb and essential information. 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 zero-parameter, read-only identity tool, the description is complete enough. It could mention 'no input required', but not necessary.
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?
No parameters exist, and schema coverage is 100%. The description confirms the tool takes no input, which is sufficient.
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' and resource 'authenticated user's profile', listing key fields (display name, email, ID). This clearly distinguishes it from sibling tools, which focus on emails, events, contacts, etc.
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 to retrieve current user info. No explicit when-not or alternatives are given, but given the unique purpose among siblings, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
19 tool updates
v1.12.0- Removed
outlook_auth_status - Removed
outlook_categorize_message - Removed
outlook_complete_task - Removed
outlook_delete_message - Removed
outlook_delete_task - Removed
outlook_flag_message - Removed
outlook_forward - Removed
outlook_list_drafts - Removed
outlook_list_inbox - Removed
outlook_list_inbox_delta - Removed
outlook_list_inbox_overrides - Removed
outlook_mark_read - Removed
outlook_move_message - Removed
outlook_read_messages - Removed
outlook_reclassify_message - Removed
outlook_reply - Removed
outlook_search_mail - Removed
outlook_send_message - Removed
outlook_set_inbox_override
62 tool updates
v1.11.0- First observed
outlook_attach_to_draft - First observed
outlook_auth_status - First observed
outlook_batch_triage - First observed
outlook_categorize_message - First observed
outlook_changes_since - First observed
outlook_complete_task - First observed
outlook_copy_message - First observed
outlook_create_contact - First observed
outlook_create_draft - First observed
outlook_create_event - First observed
outlook_create_folder - First observed
outlook_create_task - First observed
outlook_delete_contact - First observed
outlook_delete_draft - First observed
outlook_delete_event - First observed
outlook_delete_folder - First observed
outlook_delete_inbox_override - First observed
outlook_delete_message - First observed
outlook_delete_task - First observed
outlook_download_attachment - First observed
outlook_flag_message - First observed
outlook_forward - First observed
outlook_get_contact - First observed
outlook_get_event - First observed
outlook_get_mail_tips - First observed
outlook_list_accounts - First observed
outlook_list_attachments - First observed
outlook_list_calendars - First observed
outlook_list_categories - First observed
outlook_list_contacts - First observed
outlook_list_contacts_delta - First observed
outlook_list_drafts - First observed
outlook_list_events - First observed
outlook_list_events_delta - First observed
outlook_list_folders - First observed
outlook_list_inbox - First observed
outlook_list_inbox_delta - First observed
outlook_list_inbox_overrides - First observed
outlook_list_task_lists - First observed
outlook_list_tasks - First observed
outlook_list_thread - First observed
outlook_mark_read - First observed
outlook_move_message - First observed
outlook_read_message - First observed
outlook_read_messages - First observed
outlook_reclassify_message - First observed
outlook_remove_draft_attachment - First observed
outlook_rename_folder - First observed
outlook_reply - First observed
outlook_rsvp - First observed
outlook_search_contacts - First observed
outlook_search_mail - First observed
outlook_send_draft - First observed
outlook_send_message - First observed
outlook_send_with_attachments - First observed
outlook_set_inbox_override - First observed
outlook_switch_account - First observed
outlook_update_contact - First observed
outlook_update_draft - First observed
outlook_update_event - First observed
outlook_update_task - First observed
outlook_whoami
TDQS
Most tools have clearly distinct purposes, like create/read/update/delete for different entities. A few pairs like delta tools vs changes_since could cause confusion, but descriptions provide good guidance.
All tools follow the `outlook_<verb>_<entity>` pattern consistently, with no mixing of styles or abbreviations, making it easy to predict tool names.
43 tools is heavy for a typical server, but given the broad scope covering mail, calendar, contacts, tasks, and configuration, the count is justifiable though on the high side.
Notable gaps exist: no tool to delete non-draft messages, no reply or forward functionality, and no email search. These omissions will cause agent failures for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A MCP server that works with Outlook Calendar to manage event listing, reading, and updates.
A MCP server for Outlook email that lets you search, read, and draft emails and replies.
MCP server for Nylas — read email, calendars, events and contacts, and send email or create events.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for Microsoft Outlook via Graph API. 20 consolidated tools for email, calendar, contacts, folders, rules, categories, and settings with safety controls (dry-run preview, rate limiting, recipient allowlists) and MCP annotations on every tool.221,03736MIT
- AlicenseNot gradedqualityCmaintenanceComprehensive MCP server for local Microsoft Outlook automation, providing 64 tools across email, calendar, contacts, tasks, notes, and Exchange features on both Windows and macOS.1MIT
- AlicenseAqualityFmaintenanceAn MCP server that provides 49 tools to access Microsoft Outlook for Mac, enabling management of mail, calendar, contacts, tasks, and notes via AppleScript.498MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for sending and managing Microsoft Outlook email via the Microsoft Graph API, including drafts, replies, contacts, and directory search.114MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mpalermiti/outlook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server