Skip to main content
Glama

mariana-outlook-mcp

A custom MCP (Model Context Protocol) server that gives Claude Code access to Outlook Mail, Calendar, and Contacts via Microsoft Graph — with safety-first defaults. Sibling of mariana-google-mcp, same architecture pointed at Microsoft accounts (M365 work/school and personal Outlook/Hotmail).

Design Philosophy

Built for an operator who wants AI help managing their mailbox without risk of accidental damage:

  • No sending email — enforced by Microsoft, not just this code. The server never requests the Mail.Send permission, so its tokens are physically incapable of sending. You draft; you send from Outlook.

  • No deleting anything. Mail moves to a "To Be Deleted" folder (reversible). Calendar events get "DELETE - " prepended to the title. You review and confirm in the Outlook UI.

  • Every mutation is logged. An append-only JSONL action log records every write with timestamps, tool name, account, and summary.

  • Multi-account support. Work and personal Microsoft accounts under named aliases.

  • No client secret. Desktop PKCE flow — the only credential is a public Application ID.

Related MCP server: Outlook MCP Server

Setup

Easiest path: paste this one line into Claude Code and it runs the entire setup for you, including guiding you through the Azure clicks:

Fetch https://raw.githubusercontent.com/marianasmall/mariana-outlook-mcp/main/SETUP-PROMPT.md and follow the instructions in it.

The manual steps below cover the same ground.

1. Azure App Registration

  1. Go to portal.azure.com → search "App registrations" → New registration

  2. Name: "Claude Code". Supported account types: Accounts in any organizational directory and personal Microsoft accounts (the option that includes personal accounts)

  3. Redirect URI: platform Public client/native (mobile & desktop), value http://localhost

  4. Register, then copy the Application (client) ID from the Overview page

  5. Under Authentication, set "Allow public client flows" to Yes

No client secret is created — this is a PKCE public client.

2. Install and Build

git clone https://github.com/marianasmall/mariana-outlook-mcp.git
cd mariana-outlook-mcp
npm install
npm run build

3. Add to Claude Code

claude mcp add outlook --scope user \
  -e MS_CLIENT_ID="<application-client-id>" \
  -- node /FULL/PATH/TO/mariana-outlook-mcp/dist/index.js

Optional: set MS_TENANT to a specific tenant ID (defaults to common, which accepts both work and personal accounts). Restart Claude Code after adding.

4. Authenticate

Run the microsoft_auth tool with a friendly account name (e.g. consulting, personal). A browser window opens for consent; approve as the matching Microsoft account. Repeat per account. Verify with microsoft_status.

Available Tools (20)

Authentication & Status

Tool

Description

microsoft_auth

Authenticate a Microsoft account via OAuth browser flow (PKCE)

microsoft_status

Live connection health for all configured accounts

Mail (10 tools)

Tool

Description

outlook_search

Search messages (KQL: from:, subject:, or keywords)

outlook_read

Read a specific message by ID (plain-text body + attachment names)

outlook_draft

Create a draft — plain text or rich HTML body, attachments (≤3MB/file), optional reply-in-thread (does NOT send)

outlook_list_folders

List mail folders with unread counts

outlook_list_categories

List categories (the Gmail-labels equivalent)

outlook_create_category

Create a category

outlook_apply_category

Apply a category to messages

outlook_remove_category

Remove a category from messages

outlook_create_rule

Create an inbox rule (the Gmail-filter equivalent)

outlook_move_to_delete

Soft-delete: move messages to a "To Be Deleted" folder

Calendar (7 tools)

Tool

Description

calendar_list

List upcoming events

calendar_search

Search events by title keyword

calendar_get

Full details of one event

calendar_create

Create an event (attendees NOT invited by default)

calendar_update

Modify an event (attendee-notification caveat in tool description)

calendar_flag_delete

Soft-delete: prepend "DELETE - " to the title

calendar_availability

Free/busy blocks for a date range

Contacts (2 tools)

Tool

Description

contacts_search

Search contacts by name, email, or phone

contacts_list

List contacts, optionally filtered

Multi-Account Support

microsoft_auth account_name: "consulting"
microsoft_auth account_name: "personal"

Most tools accept an optional account parameter; omitted, they use the default (first-connected) account. microsoft_status shows all accounts and their health.

Configuration Files

All state lives in ~/.config/mariana-outlook-mcp/:

File

Purpose

config.json

Account registry (aliases, email hashes, default)

tokens/<hash>.json

OAuth tokens per account (never leave this machine)

action-log.jsonl

Append-only log of every write operation

Graph-vs-Gmail Differences Worth Knowing

  • Categories ≈ labels; folders ≈ folders. Outlook has both. Categories apply like Gmail labels; soft-delete uses a folder because that's the native Outlook idiom.

  • Reply drafts take a reply_to_message_id (Graph threads replies from a message, not a thread ID).

  • Moved messages get new IDs — Graph reassigns message IDs on folder moves.

  • Attendee invitations: Outlook sends invitation/update emails itself when an event has attendees; calendar_create therefore defaults to NOT attaching attendees (names go in the description) unless send_invites=true.

  • Refresh tokens last ~90 days sliding for personal accounts — regular use keeps them alive indefinitely; a long-unused account may need re-auth.

License

MIT

Available Tools

21 tools
calendar_availabilityA

Check free/busy status for a date or date range (derived from events not marked 'free').

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
date_endNoEnd date/time (ISO 8601, defaults to end of start day)
date_startYesStart date/time (ISO 8601)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It adds one useful behavioral trait: availability is derived from events not marked 'free', meaning free events are not counted as busy. However, it does not describe return format, timezone handling, or edge cases like overlapping events, which would provide fuller transparency.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and core logic. Every word earns its place with no redundancy.

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

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description is nearly complete: it covers purpose, date range capability, and the underlying rule for free/busy. Minor gaps include absence of return value details and explicit handling of annotations, but the tool's simplicity keeps this acceptable.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (account, date_end, date_start) already described in the schema. The description mentions date range, which aligns with date_start/date_end, but adds no extra meaning beyond the schema fields.

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

Purpose5/5

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

The description uses a specific verb ('Check') and resource ('free/busy status') with scope ('for a date or date range'), clearly distinguishing it from sibling tools like calendar_search and calendar_get. It also adds a key nuance about how availability is derived ('from events not marked free').

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

Usage Guidelines4/5

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

The description implies when to use this tool: when you need free/busy information rather than event details. It provides clear context (checking availability) but does not explicitly exclude alternatives or name a preferred sibling for other use cases.

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

calendar_createA

Create a calendar event. By default attendees are NOT invited (their names go into the description instead); set send_invites=true to actually invite them — Outlook sends invitation emails to every attendee on the event.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesEnd time (ISO 8601)
startYesStart time (ISO 8601, e.g. '2026-08-01T14:00:00-07:00')
titleYesEvent title
accountNoAccount name (default account if omitted)
locationNoEvent location
attendeesNoAttendee email addresses
descriptionNoEvent description
send_invitesNoActually invite attendees (default: false — Outlook emails invitations when true)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond a simple creation statement by revealing a non-obvious default: attendees are NOT invited by default, and their names are placed in the description instead. It also explains that setting send_invites=true triggers Outlook to send invitation emails, which is a meaningful side effect. This is strong behavioral transparency, though it could additionally note whether the event is immediately visible or if any authentication is required.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the core purpose ('Create a calendar event'), and immediately follows with a high-value clarification about attendees. There is no redundant information or filler, making it compact and efficient.

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

Completeness4/5

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

The description adequately covers the primary purpose and the most complex behavioral nuance (invites) for a create tool with 8 parameters and no output schema. However, it does not mention return values, error handling, or account selection, which could be relevant in context. Given the schema covers required fields and property meanings, this is a reasonably complete description, though not exhaustive.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the interplay between attendees and send_invites, including the default behavior and the exact effect of setting send_invites=true. This clarifies parameter usage beyond the static schema descriptions.

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

Purpose5/5

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

The description opens with 'Create a calendar event,' a specific verb and resource that clearly distinguishes this tool from siblings like calendar_update, calendar_get, and calendar_delete. The additional detail about attendee invitation behavior further clarifies the tool's exact function.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives (e.g., calendar_update for modifications, calendar_availability for checking slots). The usage context is implied by the verb 'create' and the sibling list, but no exclusions or alternative tool mentions are provided.

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

calendar_flag_deleteA

Soft-delete: prepend 'DELETE - ' to event title. Does NOT actually delete the event.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
event_idYesEvent ID to flag

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations available, the description carries the full burden of behavioral disclosure. It reveals the surprising behavior (only a title prefix, not a real delete) and explicitly notes the non-destructive nature, which is critical for safe operation.

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

Conciseness5/5

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

The description is two concise sentences with zero filler. The key term 'Soft-delete' is front-loaded, immediately conveying the tool's purpose and behavior.

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

Completeness4/5

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

For a simple tool with two parameters and no output schema, the description adequately covers the core behavior and the important non-delete guarantee. It lacks return value or error details, but those are not essential for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The input schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds no extra parameter-level detail; it only provides the overall operation context.

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

Purpose5/5

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

The description clearly states the specific action ('prepend 'DELETE - ' to event title') and the resource (calendar event). It also explicitly distinguishes itself from actual deletion, which separates it from any potential delete-like sibling tools.

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

Usage Guidelines4/5

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

The description implies when to use this tool by explaining it's a soft-delete that preserves the event, which helps an agent choose it over a hard-delete alternative. However, it does not explicitly name alternative tools or state when-not-to-use scenarios.

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

calendar_getB

Get full details of a specific calendar event.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
event_idYesEvent ID

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It only says 'Get full details' which implies a read operation, but it does not disclose what 'full details' includes, whether authentication is required, or any other behavioral context. This is a minimal description that adds little beyond the obvious.

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

Conciseness5/5

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

The description is a single concise sentence with no redundant words. It is front-loaded with the action and resource, and every word earns its place.

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

Completeness3/5

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

For a simple retrieval tool with one required parameter and no output schema, the description is minimally sufficient. However, the phrase 'full details' is vague and does not explain what information will be returned, which would be especially helpful given the lack of an output schema.

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

Parameters3/5

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

The schema description coverage is 100%, with both 'account' and 'event_id' having descriptions. The tool description itself adds no additional meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'full details of a specific calendar event', distinguishing it from siblings like calendar_list or calendar_search by emphasizing 'specific'. However, it does not explicitly name alternatives, so it falls short of the highest bar.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as calendar_search or calendar_list. The context is only implied by the word 'specific', but there are no explicit conditions, prerequisites, or exclusions.

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

calendar_listA

List upcoming calendar events. Times are returned in UTC.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
days_aheadNoDays to look ahead (default 7)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It adds a useful behavioral detail: times are returned in UTC. It does not explicitly state that this is a read-only operation, nor does it describe pagination, response structure, or ordering, but the verb 'list' implies a non-destructive read.

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

Conciseness5/5

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

The description is two sentences long and every word earns its place: it states the action, the resource, the timeframe, and the timezone. There is no redundant or filler content.

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

Completeness4/5

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

Given the low complexity (2 optional parameters, no nested objects) and full schema coverage, the description is reasonably complete. Without an output schema, it mentions the return type (calendar events) and the timezone (UTC). It could be more explicit about returning event details, but for a simple list tool, it provides adequate context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters (account and days_ahead). The description adds no additional meaning about these parameters beyond the schema's own descriptions, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb and resource: 'List upcoming calendar events'. It adds a timezone detail ('Times are returned in UTC') that helps specify the output. However, it does not distinguish this list tool from its sibling tools like calendar_search or calendar_get, which likely overlap in scope.

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

Usage Guidelines3/5

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

The description implies usage when you need upcoming events, but it gives no explicit guidance on when to prefer this tool over alternatives such as calendar_search or calendar_get. There are no exclusions or alternative tool references, leaving the agent to infer the intended use case from the tool name and the word 'upcoming'.

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

calendar_updateA

Modify an existing calendar event. CAUTION: if the event has invited attendees, Outlook notifies them of changes automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoNew end time (ISO 8601)
startNoNew start time (ISO 8601)
titleNoNew title
accountNoAccount name (default account if omitted)
event_idYesEvent ID to update
locationNoNew location
descriptionNoNew description

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It does add a valuable caution about automatic notifications to attendees, but it omits other important traits such as partial-update behavior, permission requirements, and behavior when the event does not exist.

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

Conciseness5/5

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

The description is exactly two sentences: one for purpose and one for a crucial side effect. Every word contributes, with no fluff or repetition.

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

Completeness3/5

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

While the purpose and the attendee-notification side effect are covered, the absence of an output schema and annotations leaves gaps around return values, partial-update semantics, and failure conditions. This makes the description only moderately complete for an update operation.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents all parameters effectively. The description adds no extra parameter-specific meaning beyond what the schema provides, earning the baseline score of 3.

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

Purpose5/5

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

The description clearly states the action ('Modify') and the resource ('an existing calendar event'), making it obvious what the tool does. This distinguishes it from sibling tools like calendar_create and calendar_get.

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

Usage Guidelines4/5

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

The phrase 'Modify an existing calendar event' clearly implies the use case, but it does not explicitly mention when to prefer this tool over alternatives or when not to use it. The context is clear enough for the common scenario.

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

contacts_listB

List Outlook contacts, optionally filtered by organization or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoFilter by organization or name substring
accountNoAccount name (default account if omitted)
max_resultsNoMax results (default 25)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosure. It only says 'List', which implicitly indicates a read operation but does not elaborate on any behavioral traits such as default account handling, pagination, or potential rate limits. The description adds little beyond the basic verb.

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

Conciseness5/5

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

The description is a single, concise sentence with no filler. It communicates the core purpose and an optional filter in an efficient, front-loaded manner.

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

Completeness3/5

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

This is a simple list tool with all parameters documented in the schema, but the description doesn't mention return format or how it differs from contacts_search. Given the absence of an output schema and annotations, the description is minimally viable but leaves some gaps around expected behavior and alternative usage.

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

Parameters3/5

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

The input schema provides 100% coverage of the parameters, each with a clear description. The description itself repeats the 'filtered by organization or name' notion already present in the schema, adding no new semantic value. Baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool lists Outlook contacts, with optional filtering. This is a specific verb+resource combination. However, it does not explicitly distinguish itself from the sibling tool contacts_search, which likely performs a similar function.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like contacts_search. It only mentions optional filtering, but gives no contextual or exclusionary cues. Sibling tool names suggest overlapping functionality, yet no differentiation is made.

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

microsoft_authA

Authenticate a Microsoft account (M365 work/school or personal e.g. Hotmail). Returns the consent URL IMMEDIATELY (does not block): give it to the user, they approve in the browser as the right Microsoft account, and the token saves in the background. Confirm afterwards with microsoft_status. A browser tab also opens automatically as a convenience, but the URL in the response is authoritative if it opens with the wrong profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_nameNoFriendly name for this account (e.g. 'consulting', 'personal')primary

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully discloses key behaviors: it returns immediately without blocking, opens a browser tab as a convenience, notes the URL in the response is authoritative (especially for wrong-profile scenarios), and explains background token saving. This goes well beyond a basic 'authenticates' statement.

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

Conciseness5/5

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

The description is three sentences, front-loaded with purpose, and every sentence delivers unique value: the immediate-return behavior, the confirmation tool, and the browser-tab caveat. No fluff or repetition.

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

Completeness5/5

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

For an auth tool with no output schema, the description covers the return behavior (consent URL), the user interaction, the background token save, and the follow-up confirmation. It gives the agent and user enough detail to use the tool correctly without any structured outputs to rely on.

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

Parameters3/5

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

The single parameter account_name is fully documented in the schema with a default and example ('consulting', 'personal'). The description doesn't add extra semantics, but the schema already provides sufficient meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description opens with 'Authenticate a Microsoft account' – a specific verb and resource – and clarifies the account types (M365 work/school or personal/Hotmail). It clearly distinguishes itself from sibling tools like microsoft_status (which confirms auth state) and the calendar/outlook tools.

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

Usage Guidelines4/5

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

The description explicitly instructs to give the consent URL to the user, explains the flow (user approves in browser, token saves in background), and directs confirmation via microsoft_status. It doesn't mention when-not-to-use or alternative tools, but the multi-step usage guidance is clear and actionable.

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

microsoft_statusA

Check connection health for all configured Microsoft accounts with a LIVE credential check against Microsoft (not just local file state). tokenStatus 'needs_reauth' means run microsoft_auth for that account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses a key behavioral trait: the tool performs a LIVE credential check against Microsoft, which implies network access and up-to-date validation, as opposed to reading local file state. It also explains the meaning of the 'needs_reauth' tokenStatus, offering useful output interpretation. However, it does not mention potential side effects, permissions, or latency, though for a status check these are less critical.

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

Conciseness5/5

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

The description is two sentences long, with no wasted words. The first sentence states the tool's core function and a key nuance (LIVE vs local). The second sentence provides an actionable conditional that enriches the output understanding. Every element earns its place, and it's front-loaded with the main purpose.

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

Completeness5/5

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

Given the tool's simplicity (no params, no output schema), the description is remarkably complete. It explains what the tool does, what the key output value means, and what action to take if that value appears. This gives the agent a full procedural loop. The 'not just local file state' clarification adds important context about the check's real-time nature, covering the tool's operational context adequately.

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

Parameters4/5

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

The tool has zero parameters, so the description needs to explain no input semantics. Per the rubric, 0 params yields a baseline of 4. The description adds no parameter information because none exists; the schema is empty, and the tool is entirely stateless from an input perspective.

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

Purpose5/5

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

The description clearly states a specific action: 'Check connection health for all configured Microsoft accounts'. It also distinguishes itself by emphasizing a 'LIVE credential check against Microsoft (not just local file state)', which differentiates it from sibling tools that might check local state. The mention of the tokenStatus output and its meaning further clarifies the tool's purpose.

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

Usage Guidelines4/5

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

The description gives a clear directive for when re-authorization is needed: 'tokenStatus 'needs_reauth' means run microsoft_auth for that account', explicitly naming the alternative tool and the condition to use it. It implies this tool is used to assess connection health, but does not explicitly state when not to use it or list other exclusions, leaving a slight gap.

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

outlook_apply_categoryA

Apply a category to one or more Outlook messages (by category NAME, not ID).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
categoryYesCategory name (from outlook_list_categories)
message_idsYesArray of Outlook message IDs

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only reveals the name-not-ID constraint, but does not mention whether the category must already exist, whether applying replaces or adds to existing categories, error handling, or side effects. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that states the primary action and key constraint. No filler or repetition. Every word earns its place.

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

Completeness3/5

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

The description is sufficient to understand the core operation and parameter format, but it lacks behavioral context such as idempotency, dependency on existing categories, or what happens with invalid message IDs. Given there is no output schema or annotations, this leaves some gaps for a mutation tool. It is minimally adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter. The description adds minimal value beyond reinforcing that category is a name and that message_ids is plural. The account parameter is already explained in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Apply') with a clear resource ('category to one or more Outlook messages') and adds a critical differentiator: 'by category NAME, not ID.' This distinguishes it from sibling tools like outlook_create_category and outlook_remove_category, and the name/ID note disambiguates from potential ID-based operations.

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

Usage Guidelines3/5

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

The description implies usage (to apply a category to messages) but does not explicitly state when to use this tool versus alternatives, such as outlook_create_rule for automating categorization or outlook_remove_category for removing. There are no explicit exclusions or alternative recommendations.

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

outlook_create_categoryA

Create a new Outlook category (the Gmail-labels equivalent).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCategory name
accountNoAccount name (default account if omitted)
color_presetNoColor preset 0-24 (default 0)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states the mutation action without mentioning idempotency, error conditions, permissions, side effects, or return values. The 'Gmail-labels equivalent' hints at typical label behavior but does not substantively explain what happens during creation.

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

Conciseness5/5

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

The description is a single, tightly crafted sentence that states the action and provides a useful analogy, with no filler or redundancy. It is front-loaded with the essential purpose.

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

Completeness3/5

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

For a tool with no output schema and no annotations, the description is minimal. While it correctly identifies the purpose, it omits practical details such as what the agent should expect as a return value, whether the operation is idempotent, and how it integrates with related tools like outlook_list_categories. However, the schema covers parameter semantics, making the description sufficient for basic invocation.

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

Parameters3/5

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

The input schema provides descriptions for all three parameters (name, account, color_preset), so the schema coverage is 100%. The tool description adds no parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb and resource: 'Create a new Outlook category.' The parenthetical '(the Gmail-labels equivalent)' provides helpful context and distinguishes it from sibling tools like outlook_apply_category and outlook_remove_category.

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

Usage Guidelines3/5

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

Usage is implied by the action verb 'create' – one would use this tool to make a new category. However, there is no explicit guidance on when to prefer this over alternatives, nor any exclusions or prerequisites, such as ensuring the category doesn't already exist or that authentication is handled.

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

outlook_create_ruleA

Create an Outlook inbox rule (the Gmail-filter equivalent). Matches incoming messages by criteria and applies actions automatically. At least one criterion and one action required.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRule display name
accountNoAccount name (default account if omitted)
mark_readNoMark matching messages as read
forward_toNoEmail address to forward matches to (NOTE: forwarding sends mail automatically — use deliberately)
body_containsNoMatch body containing any of these
from_containsNoMatch sender addresses/domains containing any of these
assign_categoryNoCategory name to assign to matches
subject_containsNoMatch subject containing any of these
move_to_folder_idNoFolder ID to move matches to (from outlook_list_folders)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It adds the requirement of at least one criterion and one action, and notes that actions apply automatically, but it does not disclose side effects like immediate activation, rule precedence, or modification/deletion limitations. The forward_to warning lives in the schema, not the description.

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

Conciseness5/5

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

Three sentences, zero wasted words. It front-loads the main action, adds a clarifying analogy, and states a key constraint. Each sentence earns its place.

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

Completeness4/5

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

For a 9-parameter creation tool with no output schema, the description covers the core idea, the requirement of criteria+action, and the automatic behavior. It misses some context like whether rules apply to existing messages or only new ones, but overall it's sufficiently complete for an agent to understand the tool's purpose and main constraints.

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

Parameters3/5

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

Schema coverage is 100% with meaningful property descriptions, so the baseline is 3. The description introduces the concept of criteria vs. actions, which adds high-level meaning, but it does not map specific parameters to those roles beyond what the schema already provides.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Create an Outlook inbox rule'. It further clarifies by calling it 'the Gmail-filter equivalent' and describes its function of matching messages by criteria and applying actions, which clearly distinguishes it from sibling tools like outlook_read or outlook_draft.

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

Usage Guidelines3/5

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

The description implies usage through 'Gmail-filter equivalent' and the criteria/action behavior, but it does not explicitly state when to prefer this tool over alternatives or list excluded scenarios. It gives context but lacks direct when-to-use/when-not-to-use guidance.

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

outlook_draftA

Create a draft email. Does NOT send — the draft appears in Outlook's Drafts folder for manual review and sending. (The server's Microsoft permissions exclude sending entirely.)

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipients (comma-separated)
toYesRecipient email address(es), comma-separated
bccNoBCC recipients (comma-separated)
bodyYesEmail body (plain text)
htmlNoOptional HTML body (tables, bold, links). PREFER this whenever the content has structure — figures, comparisons, per-person breakdowns — a formatted draft reads better than plain text. When provided it is used instead of the plain-text body.
accountNoAccount name (default account if omitted)
subjectYesEmail subject
attachmentsNoAbsolute file paths to attach (3MB max per file)
reply_to_message_idNoMessage ID to draft a REPLY to (keeps the conversation thread and original recipients; get the ID from outlook_search/outlook_read). Omit for a new conversation.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explicitly discloses the non-sending behavior, the Drafts folder placement, and the server-side permission restriction. This is strong transparency for a creation tool, though it could mention return behavior or failure modes, but those are less critical here.

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

Conciseness5/5

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

Two sentences with no redundancy. The main action is front-loaded, and the critical caveat about not sending is placed immediately after. The parenthetical explains the reason concisely. Every word earns its place.

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

Completeness4/5

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

The tool has 9 parameters but the schema fully covers them. The description addresses the most important contextual concern (draft vs send) and the outcome (appears in Drafts). It does not enumerate all parameters, but that is unnecessary given the schema. The description is complete enough for an AI agent to use the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description itself adds no parameter-specific meaning, but the schema already thoroughly defines each parameter, including the HTML preference guidance. Thus the description does not need to compensate.

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

Purpose5/5

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

The description starts with the specific verb+resource 'Create a draft email' and immediately clarifies the key distinction: it does NOT send, but creates a draft for manual review. This distinguishes it from any hypothetical send tool and from sibling read/search tools.

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

Usage Guidelines4/5

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

The description clearly implies when to use: when you want to compose an email without sending it, leaving the draft for manual review. It also states the permission limitation (cannot send), which indirectly says 'don't expect this to send'. It lacks explicit alternatives, but given the sibling set, no other tool creates drafts or emails, so the context 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_categoriesA

List Outlook categories (the Gmail-labels equivalent) for an account.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It only says 'List', which implies a read-only operation, but it does not explicitly state that there are no side effects, nor does it mention any limitations, defaults, or what happens if the account is not found. No behavioral details beyond the action itself are provided.

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

Conciseness5/5

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

The description is a single sentence that is immediately understandable, front-loaded with the verb and resource. It contains no filler or redundant information, making it highly concise and well-structured.

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

Completeness3/5

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

The tool is simple with one optional parameter and no output schema or annotations. The description tells what it does but does not describe the return format, the structure of categories, or any edge-case behavior. This is a noticeable gap for an agent that needs to know what to expect from the response. However, given the tool's minimal complexity, it is minimally viable.

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

Parameters3/5

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

The schema has 100% coverage for the single parameter 'account', with a clear description. The tool description adds no new meaning about the parameter, so the baseline of 3 applies. It neither enhances nor detracts from the schema's documentation.

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

Purpose5/5

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

The description clearly states the action 'List' and the resource 'Outlook categories', and adds a helpful analogy 'the Gmail-labels equivalent' that distinguishes it from sibling tools like outlook_create_category or outlook_list_folders. It conveys exactly what the tool does.

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

Usage Guidelines3/5

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

The description implies usage by stating it lists categories, but it does not explicitly mention when to use this tool versus alternatives or provide any exclusions. While the analogy to Gmail labels gives context, it lacks direct guidance on choosing this over sibling tools like outlook_list_folders or outlook_create_category.

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

outlook_list_foldersA

List Outlook mail folders for an account.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It states only the action 'List' with no details on return format, authentication needs, permissions, or whether the listing includes subfolders. It does not contradict any annotations (since none exist), but it fails to reveal important behavioral characteristics beyond the minimal action.

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

Conciseness5/5

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

The description is a single, succinct sentence that immediately communicates the tool's function. There is no redundancy or filler, making it appropriately sized and front-loaded.

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

Completeness3/5

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

For a simple read-only listing tool with one optional parameter and no output schema, the description is minimally adequate but lacks details about the return value or any side effects. It would be more complete if it mentioned what the response contains (e.g., folder names, paths) or any caveats like authentication requirements, but the simplicity of the tool partially compensates.

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

Parameters3/5

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

The schema already provides 100% coverage with a clear description for the 'account' parameter. The description's phrase 'for an account' aligns with the parameter but adds no extra meaning. Since schema coverage is high, the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'List' and the specific resource 'Outlook mail folders', with scope 'for an account'. This distinguishes it from sibling tools like outlook_read, outlook_search, and calendar_list, which have different purposes.

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

Usage Guidelines3/5

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

The description implies usage when an account's folders need to be listed, but provides no explicit guidance on when to choose this tool over alternatives. There are no exclusion criteria or mention of related tools like outlook_read for reading messages or calendar_list for calendar folders, leaving usage somewhat implied.

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

outlook_move_to_deleteA

Soft-delete: move messages to a 'To Be Deleted' folder. Does NOT delete or trash messages. NOTE: moved messages get NEW message IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
message_idsYesArray of Outlook message IDs to move

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full responsibility for disclosing side effects. It does an excellent job by warning that 'moved messages get NEW message IDs'—a critical, non-obvious behavior—and clarifies it is not a permanent delete. Missing are details like reversibility or permission requirements, but the most impactful behavioral trait is disclosed.

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

Conciseness5/5

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

The description is very concise, using two short sentences plus a note to convey the core action, a negative clarification, and a critical warning. Every sentence earns its place, and the key point is front-loaded.

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

Completeness4/5

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

For a tool with only two parameters and no output schema, the description covers the essential aspects: what it does, what it doesn't do, and a crucial side-effect. It lacks error-handling or response-format details, but given the simplicity, these are not necessary for a basic understanding. Overall, it is complete enough for an agent to use the tool correctly.

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

Parameters3/5

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

Both parameters are well-documented in the input schema (100% coverage): 'account' notes the default, and 'message_ids' describes the array of IDs to move. The description adds no additional parameter-level context beyond the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action: 'Soft-delete: move messages to a 'To Be Deleted' folder.' It uses a specific verb (move) and resource (messages to a folder), and distinguishes itself by explicitly saying it does NOT delete or trash messages. This differentiates it from deletion-related tools and is unmistakable in intent.

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

Usage Guidelines4/5

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

The description implies the tool is for soft-deleting messages by moving them to a specific folder, and the clarification 'Does NOT delete or trash messages' provides a boundary for when not to use it for permanent deletion. However, it does not explicitly name alternative tools for permanent deletion or other actions, leaving the when-not-to-use guidance only implicit.

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

outlook_readA

Read a specific Outlook message by ID. Returns full message content as plain text.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
message_idYesOutlook message ID

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It discloses that the tool returns full message content as plain text, which is helpful, but does not mention side effects, permissions, or whether reading marks the message as read.

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

Conciseness5/5

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

The description is a single sentence that is direct and efficiently communicates the tool's purpose and return format.

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

Completeness3/5

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

The description covers the core functionality and return format but lacks guidance on preconditions, alternative usage, or error behavior, so it is adequate but not complete for a tool with no annotations or output schema.

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

Parameters3/5

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

The schema already provides descriptions for both parameters with 100% coverage, and the description adds no additional parameter-specific meaning.

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

Purpose5/5

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

The description clearly states the tool reads a specific Outlook message by ID, which distinguishes it from sibling tools like outlook_search (finding messages) and outlook_draft (creating drafts).

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

Usage Guidelines3/5

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

The description implies usage when a message ID is known, but does not explicitly mention alternatives or when not to use it, leaving the agent to infer context from sibling names.

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

outlook_remove_categoryA

Remove a category from one or more Outlook messages (by category NAME).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name (default account if omitted)
categoryYesCategory name to remove
message_idsYesArray of Outlook message IDs

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden of disclosing behavioral traits. It does state the core mutating action (remove a category) and clarifies that matching is by name. However, it does not disclose potential side effects, failure modes (e.g., if a message does not have the category), or any authorization requirements. This is a reasonable but not comprehensive disclosure for a mutation tool.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded with the action and resource. It contains no redundant words and efficiently conveys the essential purpose and key nuance (name-based removal). This is an example of excellent conciseness.

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

Completeness3/5

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

The tool is relatively simple, and the schema covers all parameters. However, with no output schema and no annotations, the description does not explain what happens after removal (e.g., success/failure feedback) or any side effects. For a mutation tool, this leaves the agent without complete context, though the operation itself is straightforward.

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

Parameters3/5

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

Schema description coverage is 100% for all three parameters, so the baseline is 3. The description adds minimal meaning beyond the schema by emphasizing 'by category NAME' and implying message_ids is an array ('one or more messages'), but these details are already present or easily inferred from the schema. No new parameter semantics are introduced.

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

Purpose5/5

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

The description clearly states the action (remove), the resource (category from Outlook messages), and the scope (one or more messages). It also distinguishes by specifying 'by category NAME', which separates it from category operations by ID. This aligns with the sibling tools like outlook_apply_category and outlook_create_category, making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage: when you need to remove a category from messages, use this tool. However, it provides no explicit guidance on when not to use it or mentions alternative tools for related operations. The sibling tools such as outlook_apply_category exist but are not referenced, so an agent must infer the appropriate context.

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.

  1. 21 tool updatesv1.0.0
    • First observedcalendar_availability
    • First observedcalendar_create
    • First observedcalendar_flag_delete
    • First observedcalendar_get
    • First observedcalendar_list
    • First observedcalendar_search
    • First observedcalendar_update
    • First observedcontacts_list
    • First observedcontacts_search
    • First observedmicrosoft_auth
    • First observedmicrosoft_status
    • First observedoutlook_apply_category
    • First observedoutlook_create_category
    • First observedoutlook_create_rule
    • First observedoutlook_draft
    • First observedoutlook_list_categories
    • First observedoutlook_list_folders
    • First observedoutlook_move_to_delete
    • First observedoutlook_read
    • First observedoutlook_remove_category
    • First observedoutlook_search

TDQS

A3.6/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have clear, distinct purposes within their domains, but 'calendar_search' and 'calendar_list' both retrieve calendar events and could be confused. The soft-delete tools for mail and calendar share a similar pattern but are separated by domain.

Naming Consistency5/5

All tools follow a consistent 'domain_action' pattern, using lowercase with underscores (e.g., outlook_read, calendar_create, contacts_search). The use of compound actions like 'flag_delete' and 'move_to_delete' still maintains a uniform style without mixing conventions.

Tool Count4/5

With 21 tools, the server is slightly above the typical well-scoped range, but the breadth is justified by covering mail, calendar, contacts, and authentication. The tools are not excessively fragmented for the wide scope.

Completeness3/5

Mail and calendar have decent coverage, but contacts only support search and list with no create/update/delete operations. The lack of hard delete for messages/events and exclusion of sending email are notable gaps that limit full lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers