Skip to main content
Glama

Server Details

Gmail, Outlook, Hotmail, iCloud and Fastmail at once: search, read, draft, send and organise mail.

Ownership verified
Status
Healthy
Uptime
57.2% over 23 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
lumman-lab/multi-mail
GitHub Stars
0
Server Listing
Multi Mail

TDQS

A3.7/5.0

Scored across 30 tools

Disambiguation4/5

Tools are cleanly namespaced by resource (drafts, labels, messages, threads, settings), and the paired drafts_* vs messages_* tools are explicitly distinguished by descriptions ('nothing leaves the mailbox until the draft is sent' vs 'call this only when the person asked for this message to go'). labels_* (managing label definitions) vs threads_modify (applying them) is a minor point of possible confusion, but descriptions clarify. Most boundaries are clear.

Naming Consistency4/5

Consistent snake_case with a predictable resource_action or resource_subresource_action pattern (drafts_create, labels_list, threads_archive, settings_filters_create). Minor deviations in length/ordering (messages_list_all_mailboxes, settings_send_as_get get_send_as) but overall very predictable.

Tool Count3/5

30 tools is heavy for a single server, though the scope spans three providers (Gmail, Outlook, generic IMAP) across messages, threads, drafts, labels, and settings. Each tool arguably earns its place, but the surface is at the upper edge before it feels unwieldy.

Completeness4/5

Broad coverage: full draft lifecycle, label CRUD, thread archive/trash/untrash/get, message search/read/send/reply/forward, attachment retrieval, and settings (filters, vacation, signature). Minor gaps exist (no explicit contacts/mailbox-management or move-only thread op), but core read/write workflows are covered.

Available Tools

30 tools
drafts_createDraft a messageBInspect

Compose a message in a connected mailbox and keep it there as a draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoWho to copy.
toYesWho the message is addressed to.
bccNoWho to blind-copy. The other recipients are not told.
bodyYesThe message text.
htmlNoThe message as HTML, for formatting; body stays its plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it.
mailboxYesThe mailbox's name or its email address.
subjectYesThe subject line.
attachmentsNoFiles to carry: one held by a connected mailbox of the draft's own provider, or content you write out.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
linkNo
threadIdNo
previousVersionIdNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds one useful behavioral fact — the draft is retained, not dispatched — but says nothing about permissions, provider constraints, or limits.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler; the verb and the retain-as-draft constraint both land immediately. It is arguably undersized for an 8-parameter tool, which keeps it short of a 5.

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?

An output schema exists, so return values need not be described, and the schema fully documents inputs. However, for a tool with 8 parameters and several near-identical draft siblings, the description does not fully equip the agent with routing or prerequisite 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 every one of the 8 parameters (including the two attachment shapes) is already documented in the schema. The description adds no additional meaning about mailbox, recipients, html/body interaction, or attachments, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (compose) and resource (a message) with an explicit behavioral constraint: it is kept in the mailbox as a draft rather than sent. This implicitly distinguishes it from drafts_send, but the sibling is not named, so the differentiation requires inference.

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 phrase 'keep it there as a draft' implies the use case (create without sending), but there is no explicit when-to-use guidance, no prerequisites (e.g., a connected mailbox of a specific provider), and no named alternatives among drafts_send/drafts_forward/drafts_reply.

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

drafts_deleteDiscard a draftA
Destructive
Inspect

Throw away a draft. Nothing already sent is touched. Gmail mailboxes only: an Outlook draft keeps its identifier once sent, so discarding one could delete sent mail.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe id a draft tool answered, or the draftId a search or a read answered.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
discardedYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the bar is lower. The description nonetheless adds real value beyond them: it reassures that already-sent mail is untouched and explains the Gmail/Outlook mailbox restriction and its failure mode (deleting sent mail), which the annotations do not convey.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the safety note, then the constraint. Every sentence earns its place with no padding.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the destructive nature plus the mailbox restriction are covered. What remains implicit is error behavior on a non-existent or already-sent draft id, though this is a minor gap for a simple two-parameter 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 both parameters (id, mailbox) are already well documented in the schema, including the id pattern and its provenance. The description adds no additional parameter-level 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?

States a specific verb (throw away/discard) and resource (draft), and clearly distinguishes itself from siblings like drafts_create, drafts_send, and drafts_update. An agent can tell immediately this is the deletion operation on drafts.

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?

Gives an explicit environmental constraint ('Gmail mailboxes only') with the reason, which is actionable context for selecting the tool. It does not, however, name an alternative tool or describe the conditions under which discarding is preferable to drafts_update or letting a draft send.

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

drafts_forwardDraft a forwardAInspect

Compose a forward of a message as a draft, with the files it carries and inside the thread it already sits in. Nothing leaves the mailbox until the draft is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoWho to copy.
toYesWho the forward is addressed to.
bccNoWho to blind-copy. The other recipients are not told.
htmlNoYour own words as HTML, for formatting; note stays their plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it.
noteNoYour own words, above the message forwarded.
mailboxYesThe mailbox's name or its email address.
messageIdYesThe provider's own identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
linkNo
threadIdNo
previousVersionIdNo

TDQS

A3.8/5.0
Behavior4/5

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

With annotations declaring readOnlyHint=false/destructiveHint=false, the description adds real behavioral context: no send occurs until the draft is sent, and the forward preserves carried files and stays in the existing thread. These are traits not encoded in the annotations.

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

Conciseness5/5

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

Two tightly written sentences, with the core action front-loaded and the safety reassurance second. No filler or repetition.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description plus annotations cover the essential behavior for a draft-creation tool. Only the routing against sibling draft/forward tools is left implicit.

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 every parameter is already documented in the schema. The description's 'files it carries' and 'thread it already sits in' describe forward behavior rather than clarifying parameter inputs, so it adds little per-parameter meaning beyond the schema baseline.

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

Purpose4/5

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

States a specific verb and resource: 'Compose a forward of a message as a draft.' The 'as a draft' qualifier cleanly separates it from the send-oriented siblings like messages_forward, though it never names an alternative directly.

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 line 'Nothing leaves the mailbox until the draft is sent' implies the use case (stage a forward for later review rather than send now), but the when-to-use vs messages_forward or drafts_create is left to inference rather than stated.

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

drafts_replyDraft a replyAInspect

Compose a reply to a message as a draft, inside the thread it answers and quoting it below the reply: to whoever wrote it, or with replyAll to everyone on it. Nothing leaves the mailbox until the draft is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoWho to copy, instead of those replyAll copies.
toNoWho the reply goes to, instead of whoever wrote the message and, with replyAll, those it was sent to.
bccNoWho to blind-copy. The other recipients are not told.
bodyYesThe reply text.
htmlNoThe message as HTML, for formatting; body stays its plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it.
mailboxYesThe mailbox's name or its email address.
replyAllNoAlso address everyone the message was sent to and copied - never its blind copies, never this mailbox.
messageIdYesThe provider's own identifier.
attachmentsNoFiles to carry: one held by a connected mailbox of the draft's own provider, or content you write out.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
linkNo
threadIdNo
previousVersionIdNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only state readOnlyHint=false, destructiveHint=false, openWorldHint=false. The description adds real behavioral context beyond that: the draft is created inside the source thread, the original is quoted beneath the reply, and no mail is dispatched by this call. It doesn't cover provider/permission constraints, but the added context is substantive.

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

Conciseness4/5

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

A single sentence, front-loaded with the purpose before the addressing modes and the no-send safety note. No filler, though the middle clause about quoting is slightly dense.

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?

An output schema exists, so return values need no explanation, and the 9 parameters are fully described in the schema. The description covers the essential draft semantics; only provider/permission prerequisites for the underlying message are left implicit.

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 every parameter (including replyAll, to, cc, bcc, html, attachments) is already documented in the schema. The description reinforces replyAll's meaning ("to whoever wrote it, or with replyAll to everyone on it") but adds no new syntax or format detail, so baseline 3 applies.

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

Purpose4/5

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

Specific verb+resource: compose a reply as a draft, and it states the key structural facts (inside the thread it answers, quoting the original below). It does not explicitly differentiate itself from siblings like messages_reply or drafts_create, so it falls short of a 5.

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

Usage Guidelines3/5

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

"Nothing leaves the mailbox until the draft is sent" implies the when-to-use case (draft-first vs. immediate send) but never names or rules out an alternative such as messages_reply or drafts_send. Usage is inferable but not explicit.

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

drafts_sendSend a draftA
DestructiveIdempotent
Inspect

Send a draft. It leaves the mailbox and consumes the draft. Only a draft is sent: a message already sent or received is refused, and nothing leaves. Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead. A request id already spent sends nothing again: the answer says whether that send went or may have gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe id a draft tool answered, or the draftId a search or a read answered.
mailboxYesThe mailbox's name or its email address.
requestIdYesYour own id for this send, new for every message. One whose send went or may have gone sends nothing again.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
acceptedNo
threadIdYes
messageIdNo
sentCopyKeptNo
refusedRecipientsNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructive=true and idempotent=true, and the description substantiates both: it says the draft is consumed and that a spent requestId sends nothing again, with the response indicating whether the send went or may have gone. That is real added context about state destruction and at-least-once ambiguity, not a restatement of the hints.

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

Conciseness4/5

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

Front-loaded with the core action and effect, and every sentence carries information. The final sentence is somewhat convoluted ('whether that send went or may have gone'), a minor readability cost in an otherwise tight definition.

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

Completeness5/5

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

With an output schema present, return values need not be documented, and the description still tells the agent the response disambiguates send outcome. Preconditions, destructive effect, and idempotency semantics are all covered for a three-parameter mutation tool.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already explains id, mailbox, and the requestId idempotency contract nearly verbatim ('One whose send went or may have gone sends nothing again'). The description largely echoes that, adding little syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Send a draft') and immediately defines the effect ('It leaves the mailbox and consumes the draft'). It also draws the boundary against siblings by declaring that only drafts qualify and that preparation belongs to a draft tool, so an agent can separate it from drafts_create and messages_send.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not: 'Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead.' It also states the precondition (a message already sent or received is refused, and nothing leaves) and the requestId reuse rule.

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

drafts_updateEdit a draftA
Destructive
Inspect

Change a draft in a connected mailbox. A field the call leaves out stays as the draft has it. A mailbox whose provider is imap keeps the edited draft under a new id the answer names, and the old id then reads nothing; an old version its server did not remove stays in Drafts, named as previousVersionId.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoWho to copy.
idYesThe id a draft tool answered, or the draftId a search or a read answered.
toNoWho the message is addressed to.
bccNoWho to blind-copy. The other recipients are not told.
bodyNoThe whole message text, a reply's quote included. Given without html, the draft becomes plain text.
htmlNoThe whole message as HTML, for formatting; given without body, its plain-text version is read from it. An Outlook mailbox keeps only the HTML and writes the plain version from it.
mailboxYesThe mailbox's name or its email address.
subjectNoThe subject line.
attachmentsNoFiles to carry, each held by a connected mailbox of the draft's own provider or written out. Named, they replace the ones it holds, and an empty list removes them all. An Outlook draft takes on the new files before it gives up the old, so a replacement stopped midway is reported and may leave both. An Outlook draft sent while it is rewritten may lose its old files from the sent copy.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
linkNo
threadIdNo
previousVersionIdNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is known. The description adds genuinely new behavior: omitted fields are preserved, and on IMAP the edit yields a NEW id, the old id stops resolving, and any surviving old version appears as previousVersionId. That is exactly the kind of non-obvious side effect the agent cannot infer from annotations.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action, then patch semantics, then the provider-specific id caveat. Every sentence carries information, though the phrasing ('the answer names', 'reads nothing') is slightly oblique and costs a beat of parsing.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description still adds the id/previousVersionId outcome the agent must anticipate. For a 9-parameter destructive edit tool this is close to complete; only explicit alternative-tool routing is missing.

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

Parameters4/5

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

Schema coverage is 100%, so per-parameter meaning is already handled and baseline would be 3. The description adds cross-parameter semantics the schema does not express — that any omitted field is left at its current value — which materially changes how an agent should call this with 9 optional-ish fields.

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

Purpose4/5

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

States a specific verb and resource ('Change a draft in a connected mailbox') plus the mutation model, which is enough to identify the operation. It never names or contrasts with siblings like drafts_create or drafts_send, so differentiation is left to the name rather than the prose.

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 patch semantics ('A field the call leaves out stays as the draft has it') implicitly tell the agent this is for partial edits rather than full rewrites, which is useful. There is no explicit when-to-use/when-not guidance and no routing to alternatives such as drafts_create or drafts_send.

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

labels_createCreate a labelAInspect

Create a label in a connected mailbox and answer the id it is applied by. In a Gmail mailbox, and as a folder in one whose provider is imap, a / nests it under the label before it, made first where missing; in an Outlook mailbox a / is just a character.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat the label is called.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
typeNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare it is a non-destructive write; the description adds substantial context beyond that — '/' nests under the preceding label in Gmail, acts as a folder path on imap, is a literal character in Outlook, and missing parent labels are created first. The implicit side effect of auto-creating parents is genuinely useful disclosure.

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

Conciseness4/5

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

A single front-loaded sentence that carries a lot of information with no filler. It is slightly dense and awkwardly phrased ("answer the id it is applied by", "made first where missing"), which costs a point.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description covers creation semantics, id return, and provider-specific naming. It omits edge cases such as duplicate-label behavior or required permissions, so it is strong but 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 coverage is 100%, so the baseline is 3, but the description goes further by explaining that the `name` value's '/' has provider-dependent semantics (hierarchy vs. literal character), which the schema does not convey.

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

Purpose4/5

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

States a specific verb and resource ("Create a label in a connected mailbox") and adds that it returns the applied id. It does not explicitly name siblings, but "create" is self-differentiating against labels_update/labels_delete/labels_list.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, nor any pointer to alternatives such as labels_update for renaming or labels_list for lookup. The provider-specific '/' behavior is behavioral detail, not selection guidance.

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

labels_deleteDelete a labelA
Destructive
Inspect

Delete one label, by its id from labels_list. No message is deleted: in a Gmail mailbox whose provider is google the label comes off every message; an Outlook mailbox's category leaves its list, and the messages that carried it keep its name. A mailbox whose provider is imap, a Gmail one included, deletes only a folder holding no mail and no folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA label id from labels_list.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, and the description adds substantial value beyond them: it explains exactly what is destroyed per provider – Gmail label removed from every message, Outlook category removed from the list, IMAP folder deleted only if empty. This is exactly the kind of consequence detail an agent needs before invoking a destructive tool.

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

Conciseness4/5

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

The core action and id source are front-loaded, and the long second sentence earns its length by covering three distinct provider behaviors. Phrasing around the IMAP case ('deletes only a folder holding no mail and no folder') is slightly convoluted but not wasteful.

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

Completeness4/5

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

For a destructive tool with an output schema and safe/destructive annotations, the description covers the essential behavioral consequences that annotations cannot express. It stops short of noting error conditions or whether deleting an in-use label is recoverable, but it is otherwise complete enough to call 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 both parameters (id, mailbox) are already documented in the schema, and the description largely restates the id source. It adds a little provider-dependent meaning to mailbox but no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (delete one label) and ties the id to its source (labels_list), which distinguishes it cleanly from labels_update, labels_create, and labels_list. An agent can tell what this does and where the argument comes from without opening the schema.

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

Usage Guidelines4/5

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

Names the prerequisite clearly (id from labels_list) and describes the operational context (no message is deleted), but gives no explicit when-not-to-use guidance or comparison against labels_update as the non-destructive alternative. Usage is clear but not fully routed.

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

labels_listList labelsA
Read-only
Inspect

List the labels a connected mailbox holds, by the id each is applied by. A mailbox whose provider is imap holds its folders as labels, nested by /, beside UNREAD, STARRED and SPAM.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
labelsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: that IMAP folders surface as labels nested by '/', and that system labels UNREAD, STARRED and SPAM are always present.

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

Conciseness4/5

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

Two compact sentences with the core purpose front-loaded and the IMAP caveat second. The phrase 'by the id each is applied by' is slightly awkward and costs a little readability, but there is no filler.

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

Completeness4/5

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

An output schema exists, so return-value explanation is not needed, and the description covers the non-obvious IMAP label semantics. For a one-parameter read tool with full schema coverage and annotations, this is sufficient.

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

Parameters3/5

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

Schema coverage is 100% and the single 'mailbox' parameter is fully documented as a name or email address, so the schema carries the parameter burden. The description adds no format or syntax detail about the identifier beyond what the schema already states.

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

Purpose4/5

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

The description states a specific verb and resource ('List the labels a connected mailbox holds') and adds a scoping detail about IMAP providers that separates it from the mailboxes_list sibling. It stops short of explicitly naming the sibling it is not, so it is clear but not fully differentiated.

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

Usage Guidelines3/5

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

Usage is only implied by the mention of a connected mailbox and the IMAP folder-as-label note. There is no explicit statement of when to call labels_list versus mailboxes_list, nor any prerequisite or exclusion.

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

labels_updateEdit a labelA
Destructive
Inspect

Rename a label, recolour it, or both. The id comes from labels_list. An Outlook mailbox's categories are its labels, and Microsoft lets one take only a new colour. A mailbox whose provider is imap renames its folder, which takes no colour, and answers the label's new id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA label id from labels_list.
nameNoIts new name.
colorNoIts new colour.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
typeNo

TDQS

A4.4/5.0
Behavior4/5

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

With destructiveHint=true and readOnlyHint=false already declared, the description adds real value beyond annotations: it discloses that an imap rename changes the label's id (breaking existing references) and that colour updates are unavailable on imap, while Outlook cannot be renamed. It does not discuss reversibility or permissions.

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

Conciseness4/5

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

Three front-loaded sentences with no filler; the action comes first, then the id source, then provider caveats. Slightly dense on provider details, but each sentence earns its place.

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?

An output schema exists, so return values need not be documented, yet the description still flags the imap behaviour of returning a new label id. For a 4-parameter mutation with full schema coverage and annotations, nothing essential to correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot: the id originates from labels_list, and the color parameter is effectively restricted by mailbox provider (Outlook colour-only, imap no colour). The name parameter's imap rename semantics are also clarified.

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

Purpose5/5

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

States a specific verb pair and resource ('Rename a label, recolour it, or both') and points to labels_list as the source of the id, which separates it from labels_create and labels_delete. An agent can tell what it does without opening the schema.

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

Usage Guidelines4/5

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

Gives strong provider-conditional guidance: Outlook categories accept only a new colour, imap renames the folder and takes no colour. It does not explicitly contrast with labels_create/labels_delete or state when not to use it, so it falls short of full alternatives coverage.

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

mailboxes_listList mailboxesA
Read-only
Inspect

List the connected mailboxes that answer, each by the name a tool's mailbox input takes, and the tools its provider does not offer. The mail of every mailbox mailboxes_list names is read and written with Multi Mail's tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
mailboxesYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: results disclose per-provider tool gaps and confirm that every listed mailbox's mail is read/written via Multi Mail's tools. It does not discuss ordering, caching, or capability 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.

Conciseness3/5

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

Two sentences of reasonable length, but the first is awkwardly constructed ('mailboxes that answer, each by the name a tool's mailbox input takes') and the second sentence partially restates the same idea about Multi Mail's tooling. Front-loading the core 'list connected mailboxes' action would help.

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?

An output schema exists, so return values need not be spelled out, and annotations cover the safety profile. The description is nearly complete for a zero-param listing tool, with the only notable gap being explicit routing guidance versus sibling list tools.

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?

Zero parameters, so the baseline is 4. The description still earns its place by explaining that the returned mailbox names are exactly the identifiers other tools' mailbox inputs expect, which clarifies how this tool's output maps onto sibling tools' parameters.

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

Purpose4/5

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

States a specific verb and resource: list the connected mailboxes, and it goes further by noting the result includes each mailbox's canonical name and the tools its provider lacks. It is distinguishable from siblings like messages_list_all_mailboxes, though the phrase 'mailboxes that answer' is vague jargon that slightly muddies the core purpose.

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

Usage Guidelines3/5

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

The description implies usage by saying mailbox names are 'the name a tool's mailbox input takes,' which tells the agent these values feed other tools' mailbox parameters. However, it never states when to call this versus alternatives, nor any prerequisites or exclusions.

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

messages_attachments_getRead an attachmentA
Read-only
Inspect

Read one attachment of a message. The answer is what it says, as plain text; with as original it is the file itself, base64. messages_get and threads_get name a message's attachments and their sizes. Either answer names the address the original is served at whole, to a GET carrying this same credential.

ParametersJSON Schema
NameRequiredDescriptionDefault
asNotext, the default: what the file says. original: the file itself, byte for byte.
idYesAn attachment id, as a message read named it.
mailboxYesThe mailbox's name or its email address.
messageIdYesThe message's id, as a search or a read answered it.
continuationNoWhere the words resume, as the last part read named it. The original always comes whole.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
sizeYes
textNo
addressYes
charsetNo
outcomeNo
filenameYes
mimeTypeYes
returnedYes
messageIdYes
attachmentIdYes
continuationNo
contentFormatYes
sizePrecisionYes
carriesPayloadYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the read-only safety profile, and the description adds real context beyond them: the answer shape differs by the `as` parameter (plain text vs base64 file), and it discloses that a GET 'carrying this same credential' is required. It could say more about unsupported attachment types or failure modes, but the added auth and format context is valuable.

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

Conciseness3/5

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

Three sentences, mostly front-loaded, but the final sentence ('Either answer names the address the original is served at whole, to a GET carrying this same credential') is syntactically tangled and harder to parse than its content warrants.

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

Completeness4/5

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

With an output schema, full param coverage, and annotations, the description only needs to add what the structured data cannot: the format contract and the credential requirement, which it does. For a 5-param read tool it is nearly complete, missing only edge-case guidance.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description restates the `as` distinction ('what it says' vs 'the file itself, base64') and adds the continuation nuance ('The original always comes whole'), which the schema already conveys, so it adds little beyond the structured 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?

States a specific verb ('Read') and resource ('one attachment of a message'), and explicitly routes enumeration to the siblings by noting 'messages_get and threads_get name a message's attachments and their sizes.' An agent can distinguish this from messages_get/threads_get without opening a schema.

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?

It clarifies the relationship to alternatives by explaining that messages_get/threads_get only name attachments and sizes, implying this tool retrieves the content itself. It gives no explicit exclusions or prerequisite conditions, but the routing intent is clear.

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

messages_forwardForward a messageA
DestructiveIdempotent
Inspect

Forward one message to the addresses you name, with the files it carries, inside the thread it already sits in. Only the provider's own limit applies to what it carries. Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead. A request id already spent sends nothing again: the answer says whether that send went or may have gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesWho the forward is addressed to.
htmlNoYour own words as HTML, for formatting; note stays their plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it.
noteNoYour own words, above the message forwarded.
mailboxYesThe mailbox's name or its email address.
messageIdYesThe provider's own identifier.
requestIdYesYour own id for this send, new for every message. One whose send went or may have gone sends nothing again.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
acceptedNo
threadIdYes
messageIdNo
sentCopyKeptNo
refusedRecipientsNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is carried structurally. The description earns credit for adding replay semantics ('a request id already spent sends nothing again') and the provider-limit note on payload, though it does not spell out why the operation is destructive (e.g. irreversible send, no recall).

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries decision-relevant information (recipients, thread, size limit, send-vs-draft, idempotency). 'Only the provider's own limit applies to what it carries' is slightly opaque phrasing, which keeps it short of a 5.

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

Completeness4/5

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

With an output schema present, return shape need not be explained, yet the description still tells the agent the answer distinguishes a send that went from one that may have gone. Combined with the draft-vs-send routing and idempotency note, an agent has what it needs; only the destructive/irreversibility angle is left implicit.

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 documents every parameter (to, html, note, mailbox, messageId, requestId) on its own; baseline 3 applies. The description reinforces the requestId replay rule and the attachment behavior but adds no format or syntax detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource (forward one message), and three concrete scoping facts: recipients are the named addresses, existing attachments ride along, and it stays in its current thread. It also distinguishes itself from the draft path, so an agent can separate it from drafts_forward without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit routing rule: 'Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead.' That is a clear when-to-use plus a when-not-to-use with the alternative behavior named, which is exactly what the sibling list (drafts_forward) requires.

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

messages_getRead a messageB
Read-only
Inspect

Read one message in a connected mailbox, with its headers and its body. A message whose recipients one answer cannot carry names the first that fit, omittedRecipients counting the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe message's id, as a search or a thread read answered it, or a draft's own id.
viewNofull, the default, carries each message's text and attachments; summary leaves those out; headers leaves out the subject and snippet too.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ccYes
idYes
toYes
bccYes
bodyNo
dateYes
fromYes
linkNo
draftYes
folderNo
unreadYes
draftIdYes
flaggedNo
snippetNo
subjectNo
labelIdsYes
threadIdYes
bodyFormatNo
categoriesNo
attachmentsNo
omittedCharactersNo
omittedRecipientsNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and a closed-world profile, so safety is covered. The description adds one behavioral detail about recipient truncation and the omittedRecipients count, but the phrasing is so muddled that the added value is partial.

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

Conciseness3/5

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

The first sentence is tight and front-loaded. The second sentence is awkwardly constructed ('A message whose recipients one answer cannot carry names the first that fit') and consumes space without delivering a clear point.

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

Completeness4/5

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

With an output schema covering return values and annotations covering the safety profile, the definition needs only to state what is read and how. That is largely done; the odd recipient/omittedRecipients sentence is a minor blemish rather than a missing element.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (id, view, mailbox) are already documented, including the view enum semantics. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Read one message in a connected mailbox') plus scope ('with its headers and its body'). This clearly distinguishes it from messages_list and messages_list_all_mailboxes, though it does not explicitly name the nearest siblings (threads_get, messages_attachments_get).

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 when-to-use or when-not guidance, and no routing to alternatives such as messages_list to obtain ids. The only usage-adjacent content is the garbled recipient sentence, which does not help an agent decide when this tool applies.

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

messages_listSearch a mailboxB
Read-only
Inspect

Search one connected mailbox in its own provider's query language, Gmail's or Outlook's. A message whose recipients one answer cannot carry names the first that fit, omittedRecipients counting the rest. The mail of every mailbox mailboxes_list names is read and written with Multi Mail's tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesA Gmail mailbox, whatever its provider, reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ); one whose provider is imap is searched by message. An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. Any other mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message.
byNomessage, the default, answers each matching message; thread answers each matching thread with every message in it.
viewNosummary, the default, carries each message's subject and snippet; headers leaves both out.
mailboxYesThe mailbox's name or its email address.
pageTokenNoThe nextPageToken of the page before, asked with the same q and by. Outlook pages threads by their matching messages, so a thread can recur on a later page.
maxResultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
moreYes
shownYes
omittedNo
threadsNo
messagesNo
unreadableYes
nextPageTokenYes
resultSizeEstimateYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly=true, destructive=false and openWorld=false, so the safety profile is covered. The description adds genuine behavioral context about per-provider query dialects and the omittedRecipients output behavior, but it is marred by awkward prose and omits pagination/result-shape framing beyond what the schema says.

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

Conciseness2/5

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

The description is poorly front-loaded and hard to parse: 'A message whose recipients one answer cannot carry names the first that fit, omittedRecipients counting the rest' uses a confusing backward reference, and the final sentence about mailboxes_list is tangential. Only the first clause is clean; the rest buries and bloats the 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?

An output schema exists and the safety profile is fully covered by annotations, so return values needn't be explained. Still, the one sentence that does discuss output (omittedRecipients) is redundant and cryptic, and the description gives no guidance on pagination behavior even though pageToken semantics are non-trivial (threads recurring across pages).

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

Parameters3/5

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

Schema description coverage is high (83%), and the schema already documents q, by, view, mailbox, pageToken and maxResults in depth, so the description does not need to carry parameter meaning. The description's provider-language remarks overlap with the q schema text rather than adding syntax the schema lacks, making baseline 3 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 first clause gives a specific verb and resource ('Search one connected mailbox') with a clear scope (one mailbox, provider's own query language), which an agent can distinguish from messages_list_all_mailboxes. However, it never names that sibling, so the differentiation is left implicit. The remaining sentences drift into output details (omittedRecipients) and cross-references rather than reinforcing purpose.

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

Usage Guidelines3/5

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

Usage is only implied: the phrase 'one connected mailbox' hints that the all-mailbox variant is a separate tool, and the query-language detail signals search semantics. There is no explicit when-to-use, when-not-to-use, or named alternative, so an agent must infer routing from the sibling list.

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

messages_list_all_mailboxesSearch every mailboxA
Read-only
Inspect

Search every mailbox you have connected in one call. The answer names the mailbox each result came from, names any mailbox it could not search, and is merged newest first by when each message arrived, a thread by its newest. A message whose recipients one answer cannot carry names the first that fit, omittedRecipients counting the rest. The mail of every mailbox mailboxes_list names is read and written with Multi Mail's tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesA Gmail mailbox, whatever its provider, reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ); one whose provider is imap is searched by message. An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. Any other mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT.
byNomessage, the default, answers each matching message; thread answers each matching thread with every message in it.
viewNosummary, the default, carries each message's subject and snippet; headers leaves both out.
maxResultsNoHow many results to take from each mailbox.

Output Schema

ParametersJSON Schema
NameRequiredDescription
moreYes
shownYes
omittedNo
threadsNo
messagesNo
searchedYes
unreadableYes
unreachableYes
perMailboxMaxResultsYes

TDQS

A3.6/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond them: results name their source mailbox, unsearchable mailboxes are reported, results are merged newest-first with threads keyed by their newest message, and recipient lists are truncated with omittedRecipients counting the remainder.

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

Conciseness3/5

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

The purpose and merge semantics are front-loaded, but the sentences are long, clause-heavy and occasionally awkward ('The answer names the mailbox each result came from, names any mailbox it could not search...'), which slows an agent parsing the routing information. Some of the merging detail could be trimmed given an output schema exists.

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

Completeness4/5

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

With an output schema present, return structure need not be explained, yet the description still covers cross-mailbox merge order, partial-failure reporting and recipient truncation. Combined with 100% parameter coverage, an agent has nearly everything needed to call it correctly; only explicit sibling routing is missing.

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 carries the heavy lifting on q, by, view and maxResults. The description only mildly extends this ('a thread by its newest' restates by=thread semantics) and adds no new syntax or format detail, so the baseline 3 applies.

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

Purpose4/5

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

The description opens with a specific verb and scope: 'Search every mailbox you have connected in one call,' which clearly separates it from the single-mailbox sibling. It never names messages_list explicitly as the narrower alternative, so the differentiation is inferential rather than stated.

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 phrase 'in one call' and 'every mailbox' implies when this is preferable to a per-mailbox search, and the closing sentence scopes which mailboxes are covered via mailboxes_list. However, there is no explicit when-not guidance (e.g., use messages_list for a single mailbox) and no stated prerequisites or limits.

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

messages_replyReply to a messageA
DestructiveIdempotent
Inspect

Reply to a message, inside its own thread and quoting it below the reply: to whoever wrote it, or with replyAll to everyone on it. Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead. A request id already spent sends nothing again: the answer says whether that send went or may have gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoWho to copy, instead of those replyAll copies.
toNoWho the reply goes to, instead of whoever wrote the message and, with replyAll, those it was sent to.
bodyYesThe reply text.
htmlNoThe message as HTML, for formatting; body stays its plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it.
mailboxYesThe mailbox's name or its email address.
replyAllNoAlso address everyone the message was sent to and copied - never its blind copies, never this mailbox.
messageIdYesThe provider's own identifier.
requestIdYesYour own id for this send, new for every message. One whose send went or may have gone sends nothing again.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
acceptedNo
threadIdYes
messageIdNo
sentCopyKeptNo
refusedRecipientsNo

TDQS

A4.7/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses concrete behavior: the reply is threaded and quotes the original, and a replayed requestId 'sends nothing again' with an answer that says whether the send went or may have gone. It does not cover other side effects (e.g. whether the reply is stored in Sent) or any permission requirements, so it stops short of a 5.

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, each carrying distinct load: capability/threading, send-vs-draft routing, and idempotency. The core purpose is front-loaded in the first clause and there is no filler or restatement of the title.

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 8-parameter mutation tool with an output schema, the description covers the decision-critical items: what it does, when to use it versus drafting, recipient defaults, and retry safety. Return values need not be explained since an output schema exists, and nothing an agent needs to invoke this correctly is missing.

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 still adds routing semantics the schema does not spell out - default recipients are whoever wrote the message, and replyAll extends that to everyone on it, while cc substitutes for the replyAll copies. It does not elaborate on html/body interplay beyond what the schema already documents.

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

Purpose5/5

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

States a specific verb and resource ('Reply to a message') plus two differentiating traits: it goes 'inside its own thread and quoting it below the reply' and supports both sender-only and replyAll routing. This distinguishes it cleanly from siblings like messages_send, messages_forward and drafts_reply without needing the schema.

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

Usage Guidelines5/5

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

Gives an explicit use/do-not-use rule: 'Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead.' That names the alternative path (drafting) and the condition that selects it, so the agent never has to infer whether to send or prepare.

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

messages_sendSend a messageA
DestructiveIdempotent
Inspect

Compose a new message in a connected mailbox and send it in one call. Call this only when the person asked for this message to go; when they asked to prepare one, draft it instead. A request id already spent sends nothing again: the answer says whether that send went or may have gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoWho to copy.
toYesWho the message is addressed to.
bccNoWho to blind-copy. The other recipients are not told.
bodyYesThe message text.
htmlNoThe message as HTML, for formatting; body stays its plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it.
mailboxYesThe mailbox's name or its email address.
subjectYesThe subject line.
requestIdYesYour own id for this send, new for every message. One whose send went or may have gone sends nothing again.
attachmentsNoFiles to carry: one held by a connected mailbox of the message's own provider, or content you write out.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
acceptedNo
threadIdYes
messageIdNo
sentCopyKeptNo
refusedRecipientsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructive=true, idempotent=true and openWorld=true. The description goes beyond them by explaining the practical meaning of the idempotency key — a spent request id resends nothing and the response reports whether the send went or may have gone — which is genuinely useful retry guidance not encoded in the hints.

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, each doing distinct work: what it does, when to use it, and the idempotency contract. Front-loaded and free of filler.

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

Completeness4/5

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

With an output schema present, return shape need not be described, and the description covers the actionable decision plus retry semantics. Minor gap: it doesn't mention authentication/send-as identity or attachment-provider constraints, though those are largely captured in schema descriptions.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including requestId, html, and attachments is already documented in the schema. The description reinforces the requestId contract but adds no format or syntax detail beyond it; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource (compose and send a message in a connected mailbox) and explicitly separates itself from the drafting path. An agent can tell it apart from drafts_create / drafts_send without opening a schema.

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

Usage Guidelines4/5

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

Explicitly gives the selection rule: call only when the person asked the message to go, otherwise draft. It does not name the sibling tools (drafts_create, drafts_send) or address reply/forward variants, but the when/when-not condition is unambiguous.

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

settings_filters_createCreate a filterA
Destructive
Inspect

Create a rule that files incoming mail in a connected mailbox. A rule that carries mail out of the mailbox, or that bins or junks what it matches, is refused, whether or not the provider would take it. An Outlook mailbox's rule files only under labels or out of the inbox (removeLabelIds INBOX).

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoMatch mail from this sender.
queryNoAnything else to match: a Gmail search query, or for an Outlook mailbox one plain word or quoted phrase in the subject or body, with no AND, OR or NOT in capitals.
forwardNoRefused: this surface makes no rule that carries mail elsewhere.
mailboxYesThe mailbox's name or its email address.
addLabelIdsNoLabels to apply, by id. TRASH and SPAM are refused.
removeLabelIdsNoLabels to remove, by id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameNo
actionNo
enabledNo
criteriaNo
hasErrorNo
sequenceNo
deletableNo
exceptionsNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing server-side validation behavior that the schema only hints at: forwarding rules are refused regardless of what the provider would accept, and destination labels TRASH/SPAM are blocked. It also documents the Outlook-only constraint that a rule may only add labels or remove INBOX, which an agent could not infer from readOnly/destructive hints.

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

Conciseness4/5

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

Three sentences, front-loaded with the action and followed by constraints; nothing is padding. The second sentence is dense and the Outlook sentence is syntactically awkward, but each sentence carries distinct information.

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

Completeness5/5

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

For a mutating tool with an output schema and annotations covering the safety profile, this covers the remaining gaps an agent needs: accepted vs refused rule shapes and the Outlook restriction. Return-format details are correctly omitted because an output schema exists.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: it explains why 'forward' is present-but-refused and clarifies that for Outlook mailboxes removeLabelIds effectively only accepts INBOX. These provider-specific semantics are not captured in the property descriptions.

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

Purpose5/5

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

States a specific verb and resource ('Create a rule that files incoming mail in a connected mailbox') and immediately narrows the scope to filing-only rules. It is easily distinguished from settings_filters_list and settings_filters_delete, which share the filter resource but not the creation/filing semantics.

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

Usage Guidelines4/5

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

Gives clear when-not guidance: rules that carry mail out of the mailbox, or bin/junk matches, are refused. It also spells out the Outlook-specific condition. It stops short of naming an alternative tool (e.g., labels_create for tagging without matching), so the routing story is implicit rather than explicit.

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

settings_filters_deleteDelete a filterA
Destructive
Inspect

Delete one rule by its id. Mail it already filed stays where it is.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA rule id from settings_filters_list.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond them: 'Mail it already filed stays where it is', clarifying that deletion is not retroactive and does not re-file existing messages. It stops short of stating irreversibility or permission requirements, so not a 5.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action first and the side-effect caveat immediately after. Nothing is repeated or padded.

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 two-parameter delete with an output schema that already covers the response, the description supplies the action, the identifier source, and the non-retroactive effect. It is nearly complete; only irreversibility/permission context is absent, which is minor given the destructiveHint annotation.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (id, mailbox) are documented in the schema, including the pointer to settings_filters_list for the id. The description adds no format, constraint, or sourcing detail beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource: delete one filter rule identified by its id. The scope ('one rule', 'by its id') lets an agent distinguish it from settings_filters_create and settings_filters_list. It does not name siblings explicitly, so it earns a 4 rather than a 5.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no prerequisite description, and no mention of alternatives such as settings_filters_list (where the id comes from) or settings_filters_create. The usage is only implied by the verb and by the schema's parameter description.

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

settings_filters_listList filtersB
Read-only
Inspect

List the rules a connected mailbox files incoming mail by.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filterYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds meaningful domain context — that the returned rules govern incoming-mail filing for a connected mailbox — but says nothing about authorization needs, whether an unconnected mailbox errors, or result size/pagination.

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

Conciseness4/5

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

A single short sentence with no filler, front-loaded on the verb and resource. The phrasing ('the rules a connected mailbox files incoming mail by') is slightly awkward with its trailing preposition, costing a little clarity.

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?

An output schema exists, so return values need not be explained, and the one parameter is fully documented in-schema. For a simple read-only list tool this is nearly complete, with only connection/prerequisite context missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'mailbox' parameter is documented in-schema as a name or email address, so the schema carries the burden. The description adds only the notion that the mailbox is 'connected' and that its rules concern incoming mail, which is marginal extra meaning.

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

Purpose4/5

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

States a specific verb ('List') and resource ('the rules a connected mailbox files incoming mail by'), which names the filter/rule concept rather than restating the tool name. It is distinguishable from settings_filters_create/delete by the read verb, though it never explicitly says it is the read counterpart of those siblings and uses 'rules' instead of the 'filters' terminology found in the tool name.

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 gives no when-to-use conditions, prerequisites (e.g. mailbox must be connected), or pointers to alternatives such as settings_filters_create or settings_filters_delete. Usage is only inferable from the verb.

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

settings_get_vacationRead the vacation responderB
Read-only
Inspect

Read whether a connected mailbox answers mail automatically, what it says, and any schedule or restriction it carries.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
endTimeYes
startTimeYes
enableAutoReplyYes
responseSubjectYes
externalAudienceNo
responseBodyHtmlYes
restrictToDomainYes
restrictToContactsYes
externalReplyMessageNo
internalReplyMessageNo
scheduledEndDateTimeNo
responseBodyPlainTextYes
scheduledStartDateTimeNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful field-level context (auto-answer state, message text, schedule/restrictions), but does not disclose anything about permissions needed or the shape of the response beyond those field names.

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?

One front-loaded sentence with no filler; the object of the read is stated immediately and the enumerated fields are the only elaboration.

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

Completeness4/5

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

With an output schema present, the return shape need not be restated, and annotations cover the safety profile, so this simple one-parameter read tool is adequately described. The only real gap is the absence of routing guidance relative to settings_update_vacation.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'mailbox' parameter is fully documented in the schema, so the baseline is 3. The description only implies the mailbox scope via 'a connected mailbox' and adds no format or naming detail beyond the schema.

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

Purpose4/5

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

States a specific verb (Read) and the resource (the vacation responder / automatic-answer configuration) along with the fields it exposes. It does not name its sibling settings_update_vacation, so differentiation from the write counterpart is only implied by the verb 'Read'.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to call this versus settings_update_vacation, nor any stated prerequisites (e.g. mailbox must exist, must be connected). The read intent is inferable from the verb but nothing is spelled out.

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

settings_send_as_getRead the signatureA
Read-only
Inspect

Read the signature on the mailbox's own send-as identity, as HTML. A mailbox with no signature answers without one. Gmail mailboxes only: an Outlook mailbox exposes no signature to read.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
signatureNo
sendAsEmailYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already establish the safe read-only profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds meaningful beyond-annotation behavior: the response is HTML, an absent signature yields no signature rather than an error, and the operation is unsupported for Outlook mailboxes.

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 tightly written sentences with zero filler. The core purpose is front-loaded, followed immediately by the edge case and the provider limitation.

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?

An output schema exists, so return-value structure need not be explained. Given the simple one-parameter read operation, the description covers the essential context: provider support, output format, and empty-signature behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the single mailbox parameter is already fully documented as a name or email address. The description adds no syntax, format, or constraint details beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (Read) and resource (signature on the mailbox's own send-as identity), and the 'Gmail mailboxes only' caveat distinguishes it from the broader settings family. The sibling settings_send_as_patch is implicitly the write counterpart, so the read-only purpose is clear without ambiguity.

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

Usage Guidelines4/5

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

Gives a clear usage condition and exclusion: it works only for Gmail mailboxes, since Outlook exposes no signature. However, it does not explicitly name the natural alternative for changing a signature (settings_send_as_patch) or otherwise route the agent to the correct sibling tool.

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

settings_send_as_patchEdit the signatureA
DestructiveIdempotent
Inspect

Replace the signature on the mailbox's own send-as identity. Nothing of the old one is kept, so read it first with settings_send_as_get. An empty signature clears it. Gmail mailboxes only: an Outlook mailbox exposes no signature to write.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailboxYesThe mailbox's name or its email address.
signatureYesThe signature, as HTML the provider will sanitise.

Output Schema

ParametersJSON Schema
NameRequiredDescription
signatureNo
sendAsEmailYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds the crucial detail that nothing of the old value is retained, that an empty string clears the signature, and that Outlook mailboxes are unsupported. These are behavioral facts the annotations cannot express.

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 short sentences, front-loaded with the destructive replace action, then the prerequisite, then the provider restriction. No filler.

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?

An output schema exists so return values need no explanation, and the description covers destruction semantics, prerequisites, and provider limitations. Nothing an agent needs to invoke this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so both parameters are already documented (baseline 3). The description adds real semantic value by explaining the empty-string case for 'signature' and clarifying that the target is the mailbox's own send-as identity, though it does not elaborate on the HTML sanitisation noted in the schema.

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

Purpose5/5

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

States a precise verb+resource ('Replace the signature on the mailbox's own send-as identity'), which is clearly distinct from the read-side sibling settings_send_as_get. An agent can tell what this writes and to what object without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit prerequisite/alternative ('read it first with settings_send_as_get') and an explicit exclusion ('Gmail mailboxes only: an Outlook mailbox exposes no signature to write'). Both when-to-use and when-not-to-use are covered.

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

settings_update_vacationSet the vacation responderA
DestructiveIdempotent
Inspect

Turn the vacation responder on or off. A Gmail mailbox replaces the whole responder, so a schedule or a restriction it already held is not kept; an Outlook mailbox keeps what this call does not name, and holds no subject.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailboxYesThe mailbox's name or its email address.
enableAutoReplyYesWhether the mailbox answers automatically.
responseSubjectNoThe subject the answer carries.
responseBodyPlainTextNoWhat the answer says.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
endTimeYes
startTimeYes
enableAutoReplyYes
responseSubjectYes
externalAudienceNo
responseBodyHtmlYes
restrictToDomainYes
restrictToContactsYes
externalReplyMessageNo
internalReplyMessageNo
scheduledEndDateTimeNo
responseBodyPlainTextYes
scheduledStartDateTimeNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real behavioral value beyond them: it explains WHAT is destroyed (a Gmail mailbox replaces the whole responder, dropping any existing schedule or restriction) and how Outlook differs (keeps unnamed fields, holds no subject). This is exactly the kind of provider-specific destructive nuance annotations cannot convey.

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

Conciseness4/5

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

Two sentences, front-loaded with the core on/off action before the provider-specific caveats. Dense but essentially every clause (Gmail replace semantics, Outlook preservation, no subject) 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?

An output schema exists so return values need not be explained, and annotations plus the provider-specific destructive details give an agent enough to call this correctly. The main omission is any explicit routing to settings_get_vacation.

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

Parameters3/5

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

Schema description coverage is 100% and all four parameters are documented in the schema, so the baseline is 3. The description adds only incidental hints ('holds no subject' touches responseSubject) and otherwise does not clarify parameter behavior beyond the schema.

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

Purpose4/5

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

The description states a specific verb+resource (turn the vacation responder on/off) and clearly identifies the operation. It distinguishes itself semantically from settings_get_vacation without naming it, so an agent gets the intent but must infer the distinction from the verb.

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 only implied: the tradeoff of on vs off is described, but there is no explicit when-to-use guidance and no naming of the sibling settings_get_vacation as the read alternative or of any prerequisites. Adequate but with a clear gap.

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

threads_archiveArchive a threadA
Destructive
Inspect

Take one thread out of the inbox: a Gmail mailbox, whatever its provider, takes its inbox label off, and an Outlook one moves it into its archive folder. It stays in the mailbox and in search. Any other mailbox whose provider is imap moves its inbox messages into its archive folder, made as Archive where it has none, each under a new id the answer names.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe threadId a search or a read answered.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
labelIdsYes
messagesNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only supply the safety flags (readOnlyHint=false, destructiveHint=true, openWorldHint=false); the description adds genuinely useful behavior beyond them — the thread survives in the mailbox and search, Gmail removes a label while Outlook/IMAP move messages, an Archive folder is created if absent, and new ids are returned. It does not explain why destructiveHint is set despite the data being preserved, leaving a small tension unaddressed.

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

Conciseness3/5

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

The core action is front-loaded, which is good, but the whole description is one sprawling sentence with awkward constructions ('made as Archive where it has none', 'each under a new id the answer names') that force re-reading. Provider detail is useful but could be structured as shorter clauses.

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?

An output schema exists, so return values need not be explained, yet the description still covers the mutation's observable effects and provider-specific variance well. An agent has enough to call it correctly; only the rationale for the destructive annotation is missing.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (mailbox, id) are fully documented in the schema, including the id pattern. The description adds no parameter-level syntax or constraint detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a concrete verb+resource ('Take one thread out of the inbox') and spells out the exact resulting state per provider (Gmail drops the inbox label, Outlook/IMAP move to Archive). It implicitly distinguishes itself from threads_trash by noting the thread 'stays in the mailbox and in search', but it never names a sibling explicitly.

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 only implied: an agent can infer this is the non-destructive inbox-clearing option as opposed to threads_trash or threads_modify, but the description never states when to choose it over those siblings. No prerequisites, no exclusions, no alternative named.

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

threads_getRead a threadB
Read-only
Inspect

Read every message of one thread in a connected mailbox, oldest first. A message whose recipients one answer cannot carry names the first that fit, omittedRecipients counting the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe threadId a search or a read answered.
viewNofull, the default, carries each message's text and attachments; summary leaves those out; headers leaves out the subject and snippet too.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
linkNo
shownYes
totalYes
messagesYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and closed-world scope, so safety is covered. The description adds two useful behaviors beyond that: results are returned 'oldest first' and long recipient lists are truncated with an omittedRecipients count. The truncation sentence is garbled ('A message whose recipients one answer cannot carry names the first that fit'), which blunts its value.

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

Conciseness3/5

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

The first sentence is tight and front-loaded. The second sentence is nearly unparseable and reads like a mangled sentence about recipient truncation, so it costs more in confusion than it returns in information.

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

Completeness3/5

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

An output schema exists, so the description need not explain return values, and the core behavior (read all messages in a thread, ordered oldest first) is present. However, it omits the view-mode choice entirely and the one piece of behavioral prose it does include is confusing rather than clarifying.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema fully documents id, mailbox, and the full/summary/headers view enum including what each mode omits. The description adds nothing about any of the three parameters, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Read every message of one thread in a connected mailbox.' The scope ('every message of one thread') distinguishes it from messages_get and messages_list well enough for selection, though it never names those siblings explicitly.

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 only implied by the tool's narrow scope – read this when you want a whole thread rather than a single message. There is no explicit when-to-use, no mention of the alternative messages_get, and no note on prerequisites such as needing a threadId from a prior search.

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

threads_modifyLabel a threadA
Destructive
Inspect

Apply and remove labels on one thread, or one message of it - an Outlook mailbox's categories are its labels. The ids come from labels_list. Adding SPAM junks it, and taking SPAM off brings it back to the inbox. In a Gmail mailbox adding TRASH bins it too; an Outlook mailbox takes UNREAD and STARRED beside its categories and SPAM, and no other id; a Gmail mailbox whose provider is imap takes only UNREAD, STARRED, SPAM and its own labels, several a call, as Gmail does, each message keeping its id; any other mailbox whose provider is imap takes only UNREAD, STARRED, SPAM and its folders' labels, one folder a call: adding a folder's label moves the inbox messages into it and removing it moves its messages back to the inbox, each message moved taking a new id, which the answer names.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe threadId a search or a read answered, or with scope message the message's id.
scopeNothread, the default, acts on the whole thread; message acts on that one message alone.
mailboxYesThe mailbox's name or its email address.
addLabelIdsNo
removeLabelIdsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
labelIdsYes
messagesNo

TDQS

A3.7/5.0
Behavior4/5

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

With destructiveHint=true already declared, the description goes well beyond the annotation by disclosing concrete effects: SPAM junks the thread, removing SPAM restores it to the inbox, Gmail TRASH bins it, folder-label moves reissue new message ids, and imap mailboxes have varying id constraints. It omits permission/auth requirements and rate limits, but the side-effect disclosure is strong.

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

Conciseness3/5

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

The opening sentence is well front-loaded, but the final provider-taxonomy sentence is a single dense run-on that crams Gmail, Outlook, imap-generic and folder-move rules together. The information is valuable but its structure makes it hard to parse quickly.

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

Completeness4/5

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

Given a 5-param tool with an output schema and destructive annotations, the description covers the essential behavioral surface, including that moved messages get new ids that the response names. It is largely complete, though the per-provider matrix would benefit from being broken out.

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

Parameters4/5

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

Schema coverage is only 60%, but the description compensates: it explains that id is a threadId from a search/read (or a message id under message scope) and constrains which label ids are valid per mailbox/provider. The addLabelIds/removeLabelIds semantics (junk/unbin, move-to-folder) are only implied rather than spelled out per parameter.

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 gives a specific verb+resource with scope: 'Apply and remove labels on one thread, or one message of it.' It also flags the label-id source (labels_list). It does not, however, distinguish itself from close siblings like threads_archive, threads_trash, or threads_untrash, which overlap in effect (adding TRASH/SPAM).

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?

It states where ids come from (labels_list) and lays out provider-specific rules for which label ids are legal, which is useful context. But it never explicitly says when to use this tool versus the sibling threads_archive/threads_trash/threads_untrash, leaving the agent to infer routing from the side-effect notes.

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

threads_trashMove a thread to the trashA
Destructive
Inspect

Move one thread, or one message of it, to the trash - Gmail's bin, an Outlook mailbox's Deleted Items, the trash folder of a mailbox whose provider is imap - where it stays until threads_untrash brings it back or the provider's own retention ends it. A Gmail mailbox whose provider is imap keeps every label but the inbox on it and each message its id; in any other mailbox whose provider is imap each moved message takes a new id, which the answer names.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe threadId a search or a read answered, or with scope message the message's id.
scopeNothread, the default, acts on the whole thread; message acts on that one message alone.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
labelIdsYes
messagesNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds non-obvious consequences: where the item lands per provider (Gmail bin, Outlook Deleted Items, imap trash), retention behavior, label retention on Gmail/imap, and a new message id on non-Gmail imap. The id-mutation side effect is exactly the kind of trait annotations cannot convey.

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

Conciseness4/5

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

The primary action is front-loaded and the sentences carry dense, useful information with little filler. The second sentence is a convoluted run-on with nested clauses, which slightly hurts readability, but nothing is wasted.

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

Completeness4/5

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

With an output schema present, return values needn't be explained, and the description correctly defers to it ('which the answer names'). It covers destination, retention, undo, and id behavior, though it leaves the relationship to threads_archive implicit.

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 id, scope, and mailbox semantics (including the scope enum). The description reinforces the thread-vs-message distinction but adds no format or syntax detail beyond the schema, so the baseline 3 is correct.

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

Purpose5/5

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

States a specific verb+resource ('Move one thread, or one message of it, to the trash') and names the exact sibling/reverse operation (threads_untrash). An agent can distinguish it from threads_archive, threads_modify, and the messages_* tools without opening any schema.

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

Usage Guidelines4/5

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

Names threads_untrash as the operation that reverses this one, giving clear recovery context, and the 'one thread, or one message of it' phrasing signals the message-scope case. There is no explicit statement of when to prefer this over threads_archive, so it stops short of full when/when-not guidance.

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

threads_untrashRestore a thread from the trashA
Destructive
Inspect

Bring one thread, or one message of it, back out of the trash. An Outlook mailbox and a mailbox whose provider is imap put a draft back in its drafts, the owner's own mail in sent mail and the rest in the inbox - a Gmail one with every label it carried, each message keeping its id, any other imap one each under a new id the answer names.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe threadId a search or a read answered, or with scope message the message's id.
scopeNothread, the default, acts on the whole thread; message acts on that one message alone.
mailboxYesThe mailbox's name or its email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
labelIdsYes
messagesNo

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations, it discloses substantial behavioral detail: provider-specific landing locations (Outlook/imap drafts→Drafts, sent→Sent, otherwise Inbox), Gmail label preservation, and that some imap messages come back under a new id. It does not address permissions or rate limits, but the provider-dependent outcome is exactly the kind of context an agent cannot get elsewhere.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause and the second sentence is dense with genuinely useful provider behavior. It is one long, slightly overstuffed sentence, but every phrase carries information rather than padding.

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

Completeness4/5

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

With an output schema present, return values need not be explained, yet the description still notes that the answer names new ids. Combined with annotations covering the safety profile and a 100%-covered schema, the definition is complete enough to invoke correctly, with only permission/prerequisite context missing.

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

Parameters3/5

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

Schema coverage is 100%, so mailbox, id and scope are fully documented in the schema itself. The description adds no syntax or format detail for the parameters beyond echoing the thread-vs-message distinction already in the scope enum description.

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

Purpose5/5

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

States a specific verb and resource ('bring ... back out of the trash') and explicitly bounds scope to 'one thread, or one message of it', which maps directly onto the scope parameter. Together with the sibling threads_trash, an agent can immediately tell this is the inverse operation.

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 inverse relationship to threads_trash is implied by 'back out of the trash', so usage is inferrable, but the description never states when to pick this over alternatives or that the thread/message must currently be in trash. No explicit when-not guidance.

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. 4 tool updates
    • Changedmessages_get1 field changed
      • addedOutput schema / properties / omittedRecipients
        Added value: +{
        +  "type": "number"
        +}
    • Changedmessages_list2 fields changed
      • addedOutput schema / properties / messages / items / properties / omittedRecipients
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / omittedRecipients
        Added value: +{
        +  "type": "number"
        +}
    • Changedmessages_list_all_mailboxes2 fields changed
      • addedOutput schema / properties / messages / items / properties / omittedRecipients
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / omittedRecipients
        Added value: +{
        +  "type": "number"
        +}
    • Changedthreads_get1 field changed
      • addedOutput schema / properties / messages / items / properties / omittedRecipients
        Added value: +{
        +  "type": "number"
        +}
  2. 2 tool updates
    • Changedmessages_list1 field changed
      • addedOutput schema / properties / omitted
        Added value: +{
        +  "type": "number"
        +}
    • Changedmessages_list_all_mailboxes1 field changed
      • addedOutput schema / properties / omitted
        Added value: +{
        +  "type": "number"
        +}
  3. 2 tool updates
    • Changedmessages_list1 field changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message."New value: +"A Gmail mailbox, whatever its provider, reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ); one whose provider is imap is searched by message. An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. Any other mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message."
    • Changedmessages_list_all_mailboxes1 field changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."New value: +"A Gmail mailbox, whatever its provider, reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ); one whose provider is imap is searched by message. An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. Any other mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."
  4. 6 tool updates
    • Changeddrafts_create2 fields changed
      • addedOutput schema / properties / previousVersionId
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "link"
        -]New value: +[
        +  "id"
        +]
    • Changeddrafts_forward2 fields changed
      • addedOutput schema / properties / previousVersionId
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "link"
        -]New value: +[
        +  "id"
        +]
    • Changeddrafts_reply2 fields changed
      • addedOutput schema / properties / previousVersionId
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "link"
        -]New value: +[
        +  "id"
        +]
    • Changeddrafts_update2 fields changed
      • addedOutput schema / properties / previousVersionId
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "link"
        -]New value: +[
        +  "id"
        +]
    • Changedmessages_list1 field changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, with no AND, OR or NOT, and is searched by message."New value: +"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message."
    • Changedmessages_list_all_mailboxes1 field changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, with no AND, OR or NOT, and is searched by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."New value: +"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, and one in: or label: naming one folder, by the name labels_list gives a label of type user or as inbox, sent, archive, drafts, spam or trash, a name holding a space quoted and a quote or backslash inside the quotes taking a backslash before it, with no AND, OR or NOT, and is searched by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."
  5. 4 tool updates
    • Changeddrafts_send1 field changed
      • addedOutput schema / properties / sentCopyKept
        Added value: +{
        +  "const": false,
        +  "type": "boolean"
        +}
    • Changedmessages_forward1 field changed
      • addedOutput schema / properties / sentCopyKept
        Added value: +{
        +  "const": false,
        +  "type": "boolean"
        +}
    • Changedmessages_reply1 field changed
      • addedOutput schema / properties / sentCopyKept
        Added value: +{
        +  "const": false,
        +  "type": "boolean"
        +}
    • Changedmessages_send1 field changed
      • addedOutput schema / properties / sentCopyKept
        Added value: +{
        +  "const": false,
        +  "type": "boolean"
        +}
  6. 30 tool updates
    • Changeddrafts_create2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddrafts_delete2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddrafts_forward2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddrafts_reply2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddrafts_send2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddrafts_update2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlabels_create2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlabels_delete2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlabels_list2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlabels_update2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmailboxes_list1 field changed
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_attachments_get2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_forward2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_get2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_list2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_list_all_mailboxes2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_reply2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmessages_send2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_filters_create2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_filters_delete2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_filters_list2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_get_vacation2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_send_as_get2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_send_as_patch2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsettings_update_vacation2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthreads_archive2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthreads_get2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthreads_modify2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthreads_trash2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthreads_untrash2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  7. 4 tool updates
    • Changeddrafts_send1 field changed
      • addedOutput schema / properties / refusedRecipients
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedmessages_forward1 field changed
      • addedOutput schema / properties / refusedRecipients
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedmessages_reply1 field changed
      • addedOutput schema / properties / refusedRecipients
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedmessages_send1 field changed
      • addedOutput schema / properties / refusedRecipients
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  8. 1 tool update
    • Changedthreads_get1 field changed
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "link",
        -  "messages",
        -  "shown",
        -  "total"
        -]New value: +[
        +  "id",
        +  "messages",
        +  "shown",
        +  "total"
        +]
  9. 2 tool updates
    • Changedmessages_list1 field changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, plain words and quoted phrases, with no AND, OR or NOT, and answers the first page of a search by message."New value: +"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, with no AND, OR or NOT, and is searched by message."
    • Changedmessages_list_all_mailboxes1 field changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, plain words and quoted phrases, with no AND, OR or NOT, and answers the first page of a search by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."New value: +"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, is:unread, after: and before: as 2026/01/31, newer_than: in days, months or years, plain words and quoted phrases, with no AND, OR or NOT, and is searched by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."
  10. 4 tool updates
    • Changedmessages_get1 field changed
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "threadId",
        -  "from",
        -  "to",
        -  "cc",
        -  "bcc",
        -  "date",
        -  "draft",
        -  "draftId",
        -  "unread",
        -  "labelIds",
        -  "link"
        -]New value: +[
        +  "id",
        +  "threadId",
        +  "from",
        +  "to",
        +  "cc",
        +  "bcc",
        +  "date",
        +  "draft",
        +  "draftId",
        +  "unread",
        +  "labelIds"
        +]
    • Changedmessages_list3 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence."New value: +"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, plain words and quoted phrases, with no AND, OR or NOT, and answers the first page of a search by message."
      • changedOutput schema / properties / messages / items / required
        Previous value: -[
        -  "id",
        -  "threadId",
        -  "from",
        -  "to",
        -  "cc",
        -  "bcc",
        -  "date",
        -  "draft",
        -  "draftId",
        -  "unread",
        -  "labelIds",
        -  "link"
        -]New value: +[
        +  "id",
        +  "threadId",
        +  "from",
        +  "to",
        +  "cc",
        +  "bcc",
        +  "date",
        +  "draft",
        +  "draftId",
        +  "unread",
        +  "labelIds"
        +]
      • changedOutput schema / properties / threads / items / properties / messages / items / required
        Previous value: -[
        -  "id",
        -  "threadId",
        -  "from",
        -  "to",
        -  "cc",
        -  "bcc",
        -  "date",
        -  "draft",
        -  "draftId",
        -  "unread",
        -  "labelIds",
        -  "link"
        -]New value: +[
        +  "id",
        +  "threadId",
        +  "from",
        +  "to",
        +  "cc",
        +  "bcc",
        +  "date",
        +  "draft",
        +  "draftId",
        +  "unread",
        +  "labelIds"
        +]
    • Changedmessages_list_all_mailboxes3 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."New value: +"A Gmail mailbox reads Gmail's search operators: from:, to:, cc:, subject:, is:unread, is:starred, in:sent, has:attachment, filename:pdf, after:2026/01/31, before:, newer_than:7d, larger:5M, OR, -word and ( ). An Outlook mailbox reads Microsoft's keyword query language - from:, to:, cc:, subject:, body:, received:, hasAttachments:true, plain words and quoted phrases, AND, OR and NOT in capitals - and never a filter expression such as isRead eq false. A few distinctive words, with OR between alternatives, miss less than a copied subject line or sentence. A mailbox whose provider is imap reads only from:, to: (never me), subject:, plain words and quoted phrases, with no AND, OR or NOT, and answers the first page of a search by message. Where the mailboxes are of different providers only from:, to:, subject:, plain words and quoted phrases are read alike, with no AND, OR or NOT."
      • changedOutput schema / properties / messages / items / required
        Previous value: -[
        -  "id",
        -  "threadId",
        -  "from",
        -  "to",
        -  "cc",
        -  "bcc",
        -  "date",
        -  "draft",
        -  "draftId",
        -  "unread",
        -  "labelIds",
        -  "link",
        -  "mailbox"
        -]New value: +[
        +  "id",
        +  "threadId",
        +  "from",
        +  "to",
        +  "cc",
        +  "bcc",
        +  "date",
        +  "draft",
        +  "draftId",
        +  "unread",
        +  "labelIds",
        +  "mailbox"
        +]
      • changedOutput schema / properties / threads / items / properties / messages / items / required
        Previous value: -[
        -  "id",
        -  "threadId",
        -  "from",
        -  "to",
        -  "cc",
        -  "bcc",
        -  "date",
        -  "draft",
        -  "draftId",
        -  "unread",
        -  "labelIds",
        -  "link"
        -]New value: +[
        +  "id",
        +  "threadId",
        +  "from",
        +  "to",
        +  "cc",
        +  "bcc",
        +  "date",
        +  "draft",
        +  "draftId",
        +  "unread",
        +  "labelIds"
        +]
    • Changedthreads_get1 field changed
      • changedOutput schema / properties / messages / items / required
        Previous value: -[
        -  "id",
        -  "threadId",
        -  "from",
        -  "to",
        -  "cc",
        -  "bcc",
        -  "date",
        -  "draft",
        -  "draftId",
        -  "unread",
        -  "labelIds",
        -  "link"
        -]New value: +[
        +  "id",
        +  "threadId",
        +  "from",
        +  "to",
        +  "cc",
        +  "bcc",
        +  "date",
        +  "draft",
        +  "draftId",
        +  "unread",
        +  "labelIds"
        +]
  11. 19 tool updates
    • Changeddrafts_create3 fields changed
      • changedInput schema / properties / bcc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / cc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changeddrafts_forward3 fields changed
      • changedInput schema / properties / bcc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / cc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changeddrafts_reply3 fields changed
      • changedInput schema / properties / bcc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / cc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changeddrafts_send4 fields changed
      • removedOutput schema / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threadId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threadId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changeddrafts_update3 fields changed
      • changedInput schema / properties / bcc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / cc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedlabels_create2 fields changed
      • removedOutput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlabels_list2 fields changed
      • removedOutput schema / properties / labels / items / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / labels / items / properties / type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlabels_update2 fields changed
      • removedOutput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmessages_forward5 fields changed
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • removedOutput schema / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threadId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threadId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmessages_get16 fields changed
      • removedOutput schema / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bcc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / cc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / draftId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / draftId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / from / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / from / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / subject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / to / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / to / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmessages_list36 fields changed
      • removedOutput schema / properties / messages / items / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / bcc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / cc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / draftId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / draftId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / from / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / from / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / subject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / to / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / to / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / nextPageToken / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / nextPageToken / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / resultSizeEstimate / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / resultSizeEstimate / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / bcc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / cc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / draftId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / draftId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / from / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / from / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / subject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / to / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / to / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmessages_list_all_mailboxes32 fields changed
      • removedOutput schema / properties / messages / items / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / bcc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / cc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / draftId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / draftId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / from / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / from / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / subject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / to / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / to / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / bcc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / cc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / draftId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / draftId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / from / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / from / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / subject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threads / items / properties / messages / items / properties / to / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threads / items / properties / messages / items / properties / to / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmessages_reply6 fields changed
      • changedInput schema / properties / cc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • removedOutput schema / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threadId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threadId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmessages_send7 fields changed
      • changedInput schema / properties / bcc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / cc / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / to / items / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • removedOutput schema / properties / id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / threadId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / threadId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsettings_filters_create8 fields changed
      • removedOutput schema / properties / enabled / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / enabled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / hasError / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / hasError / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / sequence / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / sequence / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedsettings_filters_list8 fields changed
      • removedOutput schema / properties / filter / items / properties / enabled / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / filter / items / properties / enabled / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / filter / items / properties / hasError / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / filter / items / properties / hasError / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / filter / items / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / filter / items / properties / name / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / filter / items / properties / sequence / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / filter / items / properties / sequence / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedsettings_get_vacation26 fields changed
      • removedOutput schema / properties / endTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / endTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / externalAudience / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / externalAudience / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / externalReplyMessage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / externalReplyMessage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / internalReplyMessage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / internalReplyMessage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / responseBodyHtml / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / responseBodyHtml / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / responseBodyPlainText / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / responseBodyPlainText / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / responseSubject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / responseSubject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / restrictToContacts / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / restrictToContacts / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / restrictToDomain / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / restrictToDomain / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / scheduledEndDateTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scheduledEndDateTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / scheduledStartDateTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scheduledStartDateTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / startTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / startTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / status / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsettings_update_vacation26 fields changed
      • removedOutput schema / properties / endTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / endTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / externalAudience / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / externalAudience / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / externalReplyMessage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / externalReplyMessage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / internalReplyMessage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / internalReplyMessage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / responseBodyHtml / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / responseBodyHtml / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / responseBodyPlainText / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / responseBodyPlainText / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / responseSubject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / responseSubject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / restrictToContacts / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / restrictToContacts / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / restrictToDomain / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / restrictToDomain / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / scheduledEndDateTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scheduledEndDateTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / scheduledStartDateTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scheduledStartDateTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / startTime / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / startTime / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / status / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedthreads_get16 fields changed
      • removedOutput schema / properties / messages / items / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / bcc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / cc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / draftId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / draftId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / from / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / from / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / snippet / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / snippet / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / subject / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / messages / items / properties / to / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages / items / properties / to / type
        Added value: +[
        +  "string",
        +  "null"
        +]

Publisher details

Operator
Lumman Ltd · Publisher source
Vendor relationship
Independent · Publisher source
Trust center
Not available
Restrictions
Any number of mailboxes free, with 25 actions a day; a paid plan raises it to 1,000 a day. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables unified email management across Gmail, Outlook, iCloud, and IMAP providers with tools for search, send, organize, and batch operations via natural language.
    155 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching, reading, sending, replying to, forwarding, and organizing email across multiple SMTP/IMAP accounts.
    263 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables read and compose access to three Gmail accounts simultaneously, with tools for searching, viewing threads and messages, and drafting or sending replies.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables comprehensive email management through IMAP/SMTP protocols with tools for searching, organizing, moving, flagging, and sending emails across various email providers. Features safe preview mode for destructive operations and supports multiple email providers including Gmail, Outlook, and Chinese email services.
    7 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.